AngularJS中$http的交互问题


Posted in Javascript onMarch 29, 2017

这篇文章,主要是通过我们熟悉的jquery中ajax和jsonp的类型方式,总结一下$http的使用。

$http 是 AngularJS 中的一个核心服务,用于读取远程服务器的数据。

1. angular中的ajax

写法一:

$http({
  method: 'GET', //可以改成POST
  url: '/someUrl'
}).then(function successCallback(response) {
    // 请求成功执行代码
  }, function errorCallback(response) {
    // 请求失败执行代码
});

示例:

var app = angular.module('myApp', []);  
app.controller('siteCtrl', function($scope, $http) {
  $http({
    method: 'GET',
    url: 'https://www.runoob.com/try/angularjs/data/sites.php',

  }).then(function successCallback(response) {
      console.log(response.data);
    }, function errorCallback(response) {
      console.log('失败');
  });
});

写法二:

①GET请求

$http.get('/someUrl',config).then(successCallback, errorCallback); 
$http.get('/someUrl',{params:{}}).then(successCallback, errorCallback);

示例:

$http.get({
  'http://10.30.24.12/emp-management/empDetail',
  {params:{"id":3}}
}).then(function successCallback(response) {
    console.log(response.data.name);
  }, function errorCallback(response) {
    console.log('失败');
});

②POST请求

$http.post('/someUrl', data, config).then(successCallback, errorCallback);

示例:

$http({ 
  method:'post', 
  url:'post.php', 
  data:{name:"aaa",id:"1",age:"20"} 
}).then(function successCallback(response) {
    console.log(response);
  }, function errorCallback(response) {
    console.log('失败');
});

//但是,这时候你可能收不到返回的数据,结果为null,这是因为要转换成form data。 
//解决方案(在post中进行相应配置):
$http({ 
  method:'post', 
  url:'post.php', 
  data:{name:"aaa",id:"1",age:"20"}, 
  headers:{'Content-Type': 'application/x-www-form-urlencoded'}, 
  transformRequest: function(obj) { 
   var str = []; 
   for(var p in obj){ 
    str.push(encodeURIComponent(p) + "=" + encodeURIComponent(obj[p])); 
   } 
   return str.join("&"); 
  } 
}).then(function successCallback(response) {
    console.log(response);
  }, function errorCallback(response) {
    console.log('失败');
});

/*
原理解读:
首先,配置headers是因为,POST提交时,使用的Content-Type是application/x-www-form-urlencoded,
而使用原生AJAX的POST请求如果不指定请求头RequestHeader,默认使用的Content-Type是text/plain;charset=UTF-8,
在html中form的Content-type默认值是Content-type:application/x-www-form-urlencoded,所以要进行相应的配置。
然后,配置transformRequest是因为,如果参数是对象,需要转化一下。
*/

2.angular中的jsonp

$http({method:'JSONP',url:''}).success().error();
$http.jsonp('/someUrl').success().error();

//这里要注意,跨域请求的url后一定要追加参数callback,并且callback的值是固定的,即JSON_CALLBACK,尽量不要去做任何改动

示例:

$http({ 
  method: 'JSONP', 
  url: 'http://www.b.com/test.php?callback=JSON_CALLBACK' 
}).success(function(response){ 
  console.log(response); 
}); 

$http.jsonp(
  'http://www.b.com/test.php?callback=JSON_CALLBACK'
).success(function (response){ 
  console.log(response); 
});

3.最后,总结一下注意事项:

(1)代码里使用的.then()也可以写成.success().error(),但是v1.5中 $http 的 success 和 error 方法已废弃,使用 then 方法替代;

(2)关于参数:用GET的时候就是params,用POST/PUT/PATCH/DELETE就是data;

(3)$http.jsonp跨域请求的url后一定要追加参数callback,并且callback的值是固定的,即JSON_CALLBACK,尽量不要去做任何改动。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
模仿JQuery.extend函数扩展自己对象的js代码
Dec 09 Javascript
js下获取div中的数据的原理分析
Apr 07 Javascript
网站如何做到完全不需要jQuery也可以满足简单需求
Jun 27 Javascript
火狐下input焦点无法重复获取问题的解决方法
Jun 16 Javascript
js拼接html注意问题示例探讨
Jul 14 Javascript
JS中对Cookie的操作详解
Aug 05 Javascript
jQuery简单实现对数组去重及排序操作实例
Oct 31 jQuery
极简主义法编写JavaScript类
Nov 02 Javascript
浅谈Vue网络请求之interceptors实际应用
Feb 28 Javascript
js动态引入的四种方法
May 05 Javascript
微信小程序登录换取token的教程
May 31 Javascript
VUE中的v-if与v-show区别介绍
Mar 13 Vue.js
Angular2开发——组件规划篇
Mar 28 #Javascript
jquery实现静态搜索功能(可输入搜索文字)
Mar 28 #jQuery
jQuery插件FusionCharts绘制的2D帕累托图效果示例【附demo源码】
Mar 28 #jQuery
关于Node.js中Buffer的一些你可能不知道的用法
Mar 28 #Javascript
使用JavaScriptCore实现OC和JS交互详解
Mar 28 #Javascript
JavaScript实现分页效果
Mar 28 #Javascript
Node.js设置CORS跨域请求中多域名白名单的方法
Mar 28 #Javascript
You might like
PHP删除特定数组内容并且重建数组索引的方法.
2011/03/25 PHP
php中将网址转换为超链接的函数
2011/09/02 PHP
PHP和JAVA中的重载(overload)和覆盖(override) 介绍
2012/03/01 PHP
解析php通过cookies获取远程网页的指定代码
2013/06/25 PHP
浅谈json_encode用法
2015/03/05 PHP
配置Nginx+PHP的正确思路与过程
2016/05/10 PHP
PHP封装的MSSql操作类完整实例
2016/05/26 PHP
PHP正则表达式笔记与实例详解
2019/05/09 PHP
基于jQuery的烟花效果(运动相关)点击屏幕出烟花
2012/06/14 Javascript
ExtJS4 Grid改变单元格背景颜色及Column render学习
2013/02/06 Javascript
JavaScript中length属性的使用方法
2015/06/05 Javascript
学习JavaScript设计模式(继承)
2015/11/26 Javascript
浅析AngularJs HTTP响应拦截器
2015/12/28 Javascript
js密码强度实时检测代码
2016/03/02 Javascript
jQuery表单事件实例代码分享
2016/08/18 Javascript
javascript使用闭包模拟对象的私有属性和方法
2016/10/05 Javascript
Javascript 闭包详解及实例代码
2016/11/30 Javascript
jQuery 获取select选中值及清除选中状态
2016/12/13 Javascript
JS实现购物车特效
2017/02/02 Javascript
HTML的select控件美化
2017/03/27 Javascript
javascript实现动态显示颜色块的报表效果
2017/04/10 Javascript
Vue ElementUI之Form表单验证遇到的问题
2017/08/21 Javascript
详解小程序云开发数据库
2019/05/20 Javascript
js尾调用优化的实现
2019/05/23 Javascript
jquery 时间戳转日期过程详解
2019/10/12 jQuery
ElementUI之Message功能拓展详解
2019/10/18 Javascript
[01:31:22]DOTA2-DPC中国联赛定级赛 LBZS vs Magma BO3第二场 1月10日
2021/03/11 DOTA
详解Python中open()函数指定文件打开方式的用法
2016/06/04 Python
讲解Python3中NumPy数组寻找特定元素下标的两种方法
2019/08/04 Python
Python运行异常管理解决方案
2020/03/09 Python
scrapy爬虫:scrapy.FormRequest中formdata参数详解
2020/04/30 Python
python实现学生通讯录管理系统
2021/02/25 Python
企业负责人任命书
2014/06/05 职场文书
大学毕业生管理学求职信
2014/09/01 职场文书
教师批评与自我批评(群众路线)
2014/10/15 职场文书
工作时间证明
2015/06/15 职场文书