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脚本实现Web页面信息交互
Oct 11 Javascript
分享一个用Mootools写的鼠标滑过进度条改变进度值的实现代码
Dec 12 Javascript
Jquery插件easyUi实现表单验证示例
Dec 15 Javascript
jQuery中ajax的load()与post()方法实例详解
Jan 05 Javascript
好好了解一下Cookie(强烈推荐)
Jun 14 Javascript
基于Bootstrap实现的下拉菜单手机端不能选择菜单项的原因附解决办法
Jul 22 Javascript
Canvas实现放射线动画效果
Feb 15 Javascript
利用jQuery实现一个简单的表格上下翻页效果
Mar 14 Javascript
vue+vuex+axio从后台获取数据存入vuex实现组件之间共享数据
Apr 22 Javascript
vue跳转页面的几种方法(推荐)
Mar 26 Javascript
vue 内联样式style中的background用法说明
Aug 05 Javascript
CocosCreator入门教程之网络通信
Apr 16 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
ThinkPHP 连接Oracle数据库的详细教程[全]
2012/07/16 PHP
PHP设计模式之观察者模式(Observer)详细介绍和代码实例
2014/04/08 PHP
php通过array_shift()函数移除数组第一个元素的方法
2015/03/18 PHP
php操作xml并将其插入数据库的实现方法
2016/09/08 PHP
在php7中MongoDB实现模糊查询的方法详解
2017/05/03 PHP
在JavaScript中使用inline函数的问题
2007/03/08 Javascript
jQuery Validation插件remote验证方式的Bug解决
2010/07/01 Javascript
jQuery获取iframe的document对象的方法
2014/10/10 Javascript
JavaScript 开发工具webstrom使用指南
2014/12/09 Javascript
浅谈JavaScript异常处理语句
2015/06/26 Javascript
jquery+json实现动态商品内容展示的方法
2016/01/14 Javascript
js实现的简单图片浮动效果完整实例
2016/05/10 Javascript
Javascript下拉刷新的简单实现
2017/02/14 Javascript
JavaScript引用类型Function实例详解
2018/08/09 Javascript
vue多次循环操作示例
2019/02/08 Javascript
[01:22:42]2014 DOTA2华西杯精英邀请赛 5 24 DK VS LGD
2014/05/26 DOTA
[56:41]2018DOTA2亚洲邀请赛 3.31 小组赛 A组 Newbee vs OG
2018/04/01 DOTA
Python和C/C++交互的几种方法总结
2017/05/11 Python
python简单线程和协程学习心得(分享)
2017/06/14 Python
简单了解python反射机制的一些知识
2019/07/13 Python
python web框架 django wsgi原理解析
2019/08/20 Python
在python中使用pymysql往mysql数据库中插入(insert)数据实例
2020/03/02 Python
django rest framework serializer返回时间自动格式化方法
2020/03/31 Python
500行python代码实现飞机大战
2020/04/24 Python
详解anaconda离线安装pytorchGPU版
2020/09/08 Python
Python文件操作及内置函数flush原理解析
2020/10/13 Python
python画图时设置分辨率和画布大小的实现(plt.figure())
2021/01/08 Python
DRF使用simple JWT身份验证的实现
2021/01/14 Python
Python中生成ndarray实例讲解
2021/02/22 Python
马来西亚在线时尚女装商店:KEI MAG
2017/09/28 全球购物
用JAVA SOCKET编程,读服务器几个字符,再写入本地显示
2012/11/25 面试题
一套Java笔试题
2016/08/20 面试题
财务经理的岗位职责
2013/12/17 职场文书
运动会广播稿100字
2014/01/11 职场文书
篮球赛新闻稿
2015/07/17 职场文书
Nginx 路由转发和反向代理location配置实现
2021/11/11 Servers