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 相关文章推荐
javascript的tab切换原理与效果实现方法
Jan 10 Javascript
javascript表单验证大全
Aug 12 Javascript
JavaScript中解决多浏览器兼容性23个问题的快速解决方法
May 19 Javascript
jQuery与JS加载事件用法分析
Sep 04 Javascript
浅谈JS之iframe中的窗口
Sep 13 Javascript
Javascript 高性能之递归,迭代,查表法详解及实例
Jan 08 Javascript
jQuery动态生成表格及右键菜单功能示例
Jan 13 Javascript
详解JSON Web Token 入门教程
Jul 30 Javascript
Angular刷新当前页面的实现方法
Nov 21 Javascript
详解Vue基于vue-quill-editor富文本编辑器使用心得
Jan 03 Javascript
JavaScript(js)处理的HTML事件、键盘事件、鼠标事件简单示例
Nov 19 Javascript
浅谈vue 二级路由嵌套和二级路由高亮问题
Aug 06 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中英混合字符串截取函数代码
2011/07/17 PHP
解析PHP中如何将数组变量写入文件
2013/06/06 PHP
PHP实现Soap通讯的方法
2014/11/03 PHP
配置php.ini实现PHP文件上传功能
2014/11/27 PHP
PHP使Laravel为JSON REST API返回自定义错误的问题
2018/10/16 PHP
Javascript-Mozilla和IE中的一个函数直接量的问题分析
2007/08/12 Javascript
jQuery对象与DOM对象之间的转换方法
2010/04/15 Javascript
jquery事件重复绑定的快速解决方法
2014/01/03 Javascript
js实现的后台左侧管理菜单代码
2015/09/11 Javascript
BootStrap智能表单实战系列(六)表单编辑页面的数据绑定
2016/06/13 Javascript
JS实现的数组去除重复数据算法小结
2017/11/17 Javascript
解决Js先触发失去焦点事件再执行点击事件的问题
2018/08/30 Javascript
JS为什么说async/await是generator的语法糖详解
2019/07/11 Javascript
手把手带你搭建一个node cli的方法示例
2020/08/07 Javascript
JavaScript通如何过RGraph实现动态仪表盘
2020/10/15 Javascript
[01:38]【DOTA2亚洲邀请赛】Sumail——梦开始的地方
2017/03/03 DOTA
下载糗事百科的内容_python版
2008/12/07 Python
python实现apahce网站日志分析示例
2014/04/02 Python
详解Python编程中time模块的使用
2015/11/20 Python
python装饰器与递归算法详解
2016/02/18 Python
Python SQLite3数据库日期与时间常见函数用法分析
2017/08/14 Python
Python排序搜索基本算法之希尔排序实例分析
2017/12/09 Python
Numpy截取指定范围内的数据方法
2018/11/14 Python
python解析json串与正则匹配对比方法
2018/12/20 Python
TensorFlow卷积神经网络之使用训练好的模型识别猫狗图片
2019/03/14 Python
pycharm设置默认的UTF-8编码模式的方法详解
2020/06/01 Python
浅析canvas元素的html尺寸和css尺寸对元素视觉的影响
2019/07/22 HTML / CSS
华三通信H3C面试题
2015/05/15 面试题
高校辅导员推荐信范文
2013/12/25 职场文书
大学生职业生涯规划书模板
2014/01/03 职场文书
2014年社区庆元旦活动方案
2014/03/08 职场文书
兴趣班停课通知
2015/04/24 职场文书
2015年档案室工作总结
2015/05/23 职场文书
postgres之jsonb属性的使用操作
2021/06/23 PostgreSQL
Python中基础数据类型 set集合知识点总结
2021/08/02 Python
分享mysql的current_timestamp小坑及解决
2021/11/27 MySQL