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里使用Dom操作Xml
Jan 22 Javascript
快速排序 php与javascript的不同之处
Feb 22 Javascript
JavaScript面向对象知识串结(读JavaScript高级程序设计(第三版))
Jul 17 Javascript
jQuery过滤选择器:not()方法使用介绍
Apr 20 Javascript
jQuery异步获取json数据方法汇总
Dec 22 Javascript
jQuery简单实现日历的方法
May 04 Javascript
jQuery的position()方法详解
Jul 19 Javascript
基于JSON格式数据的简单jQuery幻灯片插件(jquery-slider)
Aug 10 Javascript
jQuery 如何实现一个滑动按钮开关
Dec 01 Javascript
浅谈javascript中的数据类型转换
Dec 27 Javascript
Node错误处理笔记之挖坑系列教程
Jun 05 Javascript
js实现unicode码字符串与utf8字节数据互转详解
Mar 21 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 Google的translate API代码
2008/12/10 PHP
Win下如何安装PHP的APC拓展
2013/08/07 PHP
能说明你的Javascript技术很烂的五个原因分析
2011/10/28 Javascript
js动态在form上插入enctype=multipart/form-data的问题
2012/05/24 Javascript
javascript上传图片前预览图片兼容大多数浏览器
2013/10/25 Javascript
为JS扩展Array.prototype.indexOf引发的问题及解决办法
2015/01/21 Javascript
jQuery实现在textarea指定位置插入字符或表情的方法
2015/03/11 Javascript
js实现精美的图片跟随鼠标效果实例
2015/05/16 Javascript
jQuery实现div横向拖拽排序的简单实例
2016/07/13 Javascript
JS实现双击内容变为可编辑状态
2017/03/03 Javascript
JS基于正则表达式的替换操作(replace)用法示例
2017/04/28 Javascript
vue router-link传参以及参数的使用实例
2017/11/10 Javascript
微信小程序结合Storage实现搜索历史效果
2019/05/18 Javascript
node实现简单的增删改查接口实例代码
2019/08/22 Javascript
JS页面获取 session 值,作用域和闭包学习笔记
2019/10/16 Javascript
JS轮播图的实现方法2
2020/08/25 Javascript
[44:15]国士无双DOTA2 6.82版本详解(上)
2014/09/28 DOTA
[00:32]2018DOTA2亚洲邀请赛出场——LGD
2018/04/04 DOTA
实例讲解python函数式编程
2014/06/09 Python
python numpy 显示图像阵列的实例
2018/07/02 Python
python操作excel文件并输出txt文件的实例
2018/07/10 Python
python 使用re.search()筛选后 选取部分结果的方法
2018/11/28 Python
python 使用pandas计算累积求和的方法
2019/02/08 Python
关于PyCharm安装后修改路径名称使其可重新打开的问题
2020/10/20 Python
解决H5的a标签的download属性下载service上的文件出现跨域问题
2019/07/16 HTML / CSS
实习教师个人的自我评价
2013/11/08 职场文书
乡镇信息公开实施方案
2014/03/23 职场文书
协议书样本
2014/04/23 职场文书
2014年预算员工作总结
2014/12/05 职场文书
党员公开承诺书2015
2015/01/21 职场文书
小学校长个人总结
2015/03/03 职场文书
停电调休通知
2015/04/16 职场文书
2015大学生入党个人自传
2015/06/26 职场文书
校园文化艺术节开幕词
2016/03/04 职场文书
python 如何在list中找Topk的数值和索引
2021/05/20 Python
Vue自定义铃声提示音组件的实现
2022/01/22 Vue.js