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 相关文章推荐
iframe 异步加载技术及性能分析
Jul 19 Javascript
分享一个自定义的console类 让你不再纠结JS中的调试代码的兼容
Apr 20 Javascript
js借助ActiveXObject实现创建文件
Sep 29 Javascript
jQuery实现Meizu魅族官方网站的导航菜单效果
Sep 14 Javascript
关于JS中的apply,call,bind的深入解析
Apr 05 Javascript
AngularJS指令与控制器之间的交互功能示例
Dec 14 Javascript
使用bootstraptable插件实现表格记录的查询、分页、排序操作
Aug 06 Javascript
在Vue中使用Compass的方法
Mar 02 Javascript
对angularJs中$sce服务安全显示html文本的实例
Sep 30 Javascript
JS使用new操作符创建对象的方法分析
May 30 Javascript
Vue中对iframe实现keep alive无刷新的方法
Jul 23 Javascript
如何基于javascript实现贪吃蛇游戏
Feb 09 Javascript
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下对字符串的递增运算代码
2010/08/21 PHP
PHP 读取Postgresql中的数组
2013/04/14 PHP
浅析PHP中的字符串编码转换(自动识别原编码)
2013/07/02 PHP
php实现以只读方式打开文件的方法
2015/03/16 PHP
PHP获得数组交集与差集的方法
2015/06/10 PHP
Symfony2使用Doctrine进行数据库查询方法实例总结
2016/03/18 PHP
php学习笔记之mb_strstr的基本使用
2018/02/03 PHP
几款极品的javascript压缩混淆工具
2007/05/16 Javascript
jQuery 改变CSS样式基础代码
2010/02/11 Javascript
Javascript load Page,load css,load js实现代码
2010/03/31 Javascript
解决js下referer兼容各大浏览器的方法
2014/11/03 Javascript
实例详解AngularJS实现无限级联动菜单
2016/01/15 Javascript
js剪切板应用clipboardData实例解析
2016/05/29 Javascript
Document.body.scrollTop的值总为零的快速解决办法
2016/06/09 Javascript
angular源码学习第一篇 setupModuleLoader方法
2016/10/20 Javascript
详解Angular之constructor和ngOnInit差异及适用场景
2017/06/22 Javascript
JS 组件系列之Bootstrap Table的冻结列功能彻底解决高度问题
2017/06/30 Javascript
基于JavaScript实现报警器提示音效果
2017/10/27 Javascript
JavaScript中call和apply方法的区别实例分析
2018/08/03 Javascript
vue中的适配px2rem示例代码
2018/11/19 Javascript
[46:27]DOTA2上海特级锦标赛主赛事日 - 1 胜者组第一轮#2LGD VS MVP.Phx第一局
2016/03/02 DOTA
python赋值操作方法分享
2013/03/23 Python
python实现的正则表达式功能入门教程【经典】
2017/06/05 Python
使用pandas对两个dataframe进行join的实例
2018/06/08 Python
python去掉 unicode 字符串前面的u方法
2018/10/21 Python
python+pyqt5编写md5生成器
2019/03/18 Python
PyQt5 在label显示的图片中绘制矩形的方法
2019/06/17 Python
基于Django OneToOneField和ForeignKey的区别详解
2020/03/30 Python
浅谈html5标签css3的常用样式
2016/10/20 HTML / CSS
英国可持续奢侈品包包品牌:Elvis & Kresse
2018/08/05 全球购物
李维斯法国官网:Levi’s法国
2019/07/13 全球购物
新锐科技Java程序员面试题
2016/07/25 面试题
2015年会计年终工作总结
2015/05/26 职场文书
建国大业观后感800字
2015/06/01 职场文书
劳动合同变更协议书范本
2019/04/18 职场文书
win10忘记pin密码登录不了怎么办?win10忘记pin密码登不进去的解决方法
2022/07/07 数码科技