当前位置: 首页 > 编程笔记 >

AngularJS中$http的交互问题

班凌
2023-03-14
本文向大家介绍AngularJS中$http的交互问题,包括了AngularJS中$http的交互问题的使用技巧和注意事项,需要的朋友参考一下

这篇文章,主要是通过我们熟悉的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,尽量不要去做任何改动。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持小牛知识库。

 类似资料:
  • 本文向大家介绍angularJS之$http:与服务器交互示例,包括了angularJS之$http:与服务器交互示例的使用技巧和注意事项,需要的朋友参考一下 在angularJS中与远程HTTP服务器交互时会用一个非常关键的服务-$http。 $http是angular中的一个核心服务,利用浏览器的xmlhttprequest或者via JSONP对象与远程HTTP服务器进行交互。 $http的

  • 我的angularjs$http请求有问题。当我向API发送请求时,浏览器阻止了它,如:FIREFOX中的错误:阻止加载混合活动内容“http://www.example.com/rest/default/V1/integration/admin/token/” CHROME出错:混合内容:页面位于'https://www.example.com/load.shtml#/register/pos/

  • 我创建了一个Spring/angularjs应用程序,但我在“post”方面遇到了一些问题,当我试图在没有angularjs的情况下测试控制器时,我得到了以下消息: “时间戳”:1495521855274,“状态”:415,“错误”:“不受支持的媒体类型”,“异常”:“org.springframework.web.httpmediatypenotsupportedexception”,“消息”:

  • 本文向大家介绍 Js和native交互的方法与问题 相关面试题,主要包含被问及 Js和native交互的方法与问题 时的应答技巧和注意事项,需要的朋友参考一下 实现JS和Native交互有两种方式: 第一种:shouldOverrideUrlLoading(WebView view, String url) 通过给WebView加一个事件监听对象(WebViewClient)并重写shouldOv

  • 我有以下屏幕,需要必要的命令来合并2个提交。

  • How do you set priorities in your work?   这道题可细听一下面试官的意图,到底想听项目细节的priority制定,还是High level的个人工作习惯priority。如果没有明确指出,也可以两种都提一下。个人工作习惯priority因人而异,制定OKR和工作计划的好方法和管理软件也很多,就不细说了。主要聊一下项目细节的priority。一个项目从Kick