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 相关文章推荐
在一个浏览器里呈现所有浏览器测试结果的前端测试工具的思路
Mar 02 Javascript
javascript函数中参数传递问题示例探讨
Jul 31 Javascript
JavaScript的React Web库的理念剖析及基础上手指南
May 10 Javascript
Extjs4.0 ComboBox如何实现三级联动
May 11 Javascript
AngularJS学习第一篇 AngularJS基础知识
Feb 13 Javascript
jQuery插件FusionCharts实现的2D饼状图效果【附demo源码下载】
Mar 03 Javascript
JavaScript中offsetWidth的bug及解决方法
May 17 Javascript
jquery.validate.js 多个相同name的处理方式
Jul 10 jQuery
教你用Cordova打包Vue项目的方法
Oct 17 Javascript
webpack 从指定入口文件中提取公共文件的方法
Nov 13 Javascript
Vue+Spring Boot简单用户登录(附Demo)
Nov 12 Javascript
javascript函数式编程基础
Sep 15 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
在线增减.htpasswd内的用户
2006/10/09 PHP
PHP 面向对象详解
2012/09/13 PHP
使用Linux五年积累的一些经验技巧
2013/06/20 PHP
php 中phar包的使用教程详解
2018/10/26 PHP
javascript 学习笔记(onchange等)
2010/11/14 Javascript
基于jquery的loading 加载提示效果实现代码
2011/09/01 Javascript
jquery 插件学习(四)
2012/08/06 Javascript
js判断背景图片是否加载成功使用img的width实现
2013/05/29 Javascript
使用javascript控制cookie显示和隐藏背景图
2014/02/12 Javascript
关闭页面时window.location事件未执行的原因分析及解决方案
2014/09/01 Javascript
jquery+CSS实现的多级竖向展开树形TRee菜单效果
2015/08/24 Javascript
jquery 表单验证之通过 class验证表单不为空
2015/11/02 Javascript
JavaScript实现获取某个元素相邻兄弟节点的prev与next方法
2016/01/25 Javascript
详解Webwork中Action 调用的方法
2016/02/02 Javascript
JS实现鼠标框选效果完整实例
2016/06/20 Javascript
Vue2实现组件props双向绑定
2016/12/02 Javascript
vue 实现 ios 原生picker 效果及实现思路解析
2017/12/06 Javascript
vue实现tab切换外加样式切换方法
2018/03/16 Javascript
解析Json字符串的三种方法日常常用
2018/05/02 Javascript
在vue.js中使用JSZip实现在前端解压文件的方法
2018/09/05 Javascript
Vue.js实现表格渲染的方法
2018/09/07 Javascript
原生JS实现简单的无缝自动轮播效果
2018/09/26 Javascript
微信小程序实现拍照画布指定区域生成图片
2019/07/18 Javascript
vue-router之实现导航切换过渡动画效果
2019/10/31 Javascript
JavaScript oncopy事件用法实例解析
2020/05/13 Javascript
Python中线程的MQ消息队列实现以及消息队列的优点解析
2016/06/29 Python
Python中with及contextlib的用法详解
2017/06/08 Python
Python3 文章标题关键字提取的例子
2019/08/26 Python
Python中的上下文管理器相关知识详解
2019/09/19 Python
python的等深分箱实例
2019/11/22 Python
Python 批量读取文件中指定字符的实现
2020/03/06 Python
Numpy 理解ndarray对象的示例代码
2020/04/03 Python
Python日志器使用方法及原理解析
2020/09/27 Python
接口中的方法可以是abstract的吗
2015/07/23 面试题
银行学习十八大感想
2014/01/11 职场文书
保安2014年终工作总结
2014/12/06 职场文书