GVKun编程网logo

AngularJS $http post 传递参数数据(angular url传参)

11

本篇文章给大家谈谈AngularJS$httppost传递参数数据,以及angularurl传参的知识点,同时本文还将给你拓展AngularJs$http.post()不发送数据、AngularJS$

本篇文章给大家谈谈AngularJS $http post 传递参数数据,以及angular url传参的知识点,同时本文还将给你拓展AngularJs $ http.post()不发送数据、AngularJS $ http.post删除属性、AngularJs $ http.post()不发送数据、AngularJS $http post 传递参数数据的方法等相关知识,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

AngularJS $http post 传递参数数据(angular url传参)

AngularJS $http post 传递参数数据(angular url传参)

在cordova开发的时候使用到了$http的post方法,传递的参数服务端怎么都接收不到,搜索了下,发现使用AngularJS通过POST传递参数还是需要设置一些东西才可以!

1、不能直接使用params

例如:

$http({  
            method: "POST",url: "http://192.168.2.2:8080/setId",params: {
		cellphoneId: "b373fed6be325f7"
}
        }).success();



当你这样写的时候它会把id写到url后面:
http://192.168.2.2:8080/setId?cellphoneId=b373fed6be325f7"
会在url后面添加"?cellphoneId=b373fed6be325f7",查了些资料发现params这个参数是用在GET请求中的,而 POST/PUT/PATCH就需要使用data来传递;

2、直接使用data

$http({  
            method: "POST",data: {
		cellphoneId: "b373fed6be325f7"
} }).success();


这样的话传递的,是存在于Request Payload中,后端无法获取到参数


这时发现Content-Type:application/json;charset=UTF-8,而POST表单请求提交时,使用的Content-Type是application/x-www-form-urlencoded,所以需要把Content-Type修改下!

3、修改Content-Type

$http({  
            method: "POST",data: {cellphoneId: "b373fed6be325f7"},headers: { 'Content-Type': 'application/x-www-form-urlencoded' }
 }).success();


这时数据是放到了Form Data中但是发现是以对象的形式存在,所以需要进行序列化!

4、对参数进行序列化

$http({    
            method: "POST",headers: { 'Content-Type': 'application/x-www-form-urlencoded' },transformRequest: function(obj) {  
          var str = [];  
          for (var s in obj) {  
            str.push(encodeURIComponent(s) + "=" + encodeURIComponent(obj[s]));  
          }  
          return str.join("&");  
        }  
 }).success();  

AngularJs $ http.post()不发送数据

AngularJs $ http.post()不发送数据

有谁能告诉我为什么下面的语句不发送post数据到指定的url? url被调用,但在服务器上,当我打印$ _POST – 我得到一个空数组。如果我在将消息添加到数据之前在控制台中打印消息 – 它显示正确的内容。
$http.post('request-url',{ 'message' : message });

我也试过它与数据作为字符串(具有相同的结果):

$http.post('request-url',"message=" + message);

它似乎是工作,当我使用它在以下格式:

$http({
    method: 'POST',url: 'request-url',data: "message=" + message,headers: {'Content-Type': 'application/x-www-form-urlencoded'}
});

但是有一种方法使用$ http.post() – 并且我总是要包括标题才能工作?我相信上面的内容类型是指定发送数据的格式,但是我可以发送它作为javascript对象吗?

我有同样的问题使用asp.net MVC和 found the solution here

There is much confusion among newcomers to AngularJS as to why the
$http service shorthand functions ($http.post(),etc.) don’t appear to
be swappable with the jQuery equivalents (jQuery.post(),etc.)

The difference is in how jQuery and AngularJS serialize and transmit the data. Fundamentally,the problem lies with your server language of choice being unable to understand AngularJS’s transmission natively … By default,jQuery transmits data using

06000

and the familiar foo=bar&baz=moe serialization.

AngularJS,however,transmits data using

06001

and { "foo": "bar","baz": "moe" }

JSON serialization,which unfortunately some Web server languages—notably
PHP
—do not unserialize natively.

奇迹般有效。

// Your app's root module...
angular.module('MyModule',[],function($httpProvider) {
  // Use x-www-form-urlencoded Content-Type
  $httpProvider.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded;charset=utf-8';

  /**
   * The workhorse; converts an object to x-www-form-urlencoded serialization.
   * @param {Object} obj
   * @return {String}
   */ 
  var param = function(obj) {
    var query = '',name,value,fullSubName,subName,subValue,innerObj,i;

    for(name in obj) {
      value = obj[name];

      if(value instanceof Array) {
        for(i=0; i<value.length; ++i) {
          subValue = value[i];
          fullSubName = name + '[' + i + ']';
          innerObj = {};
          innerObj[fullSubName] = subValue;
          query += param(innerObj) + '&';
        }
      }
      else if(value instanceof Object) {
        for(subName in value) {
          subValue = value[subName];
          fullSubName = name + '[' + subName + ']';
          innerObj = {};
          innerObj[fullSubName] = subValue;
          query += param(innerObj) + '&';
        }
      }
      else if(value !== undefined && value !== null)
        query += encodeURIComponent(name) + '=' + encodeURIComponent(value) + '&';
    }

    return query.length ? query.substr(0,query.length - 1) : query;
  };

  // Override $http service's default transformRequest
  $httpProvider.defaults.transformRequest = [function(data) {
    return angular.isObject(data) && String(data) !== '[object File]' ? param(data) : data;
  }];
});

AngularJS $ http.post删除属性

AngularJS $ http.post删除属性

当我$http.post在AngularJS中使用类似对象的对象时:

{  name: ''232'', id: ''3434'', $type: "API.Models.Fields.ValuesList, API" }

签名:

$http.post(''api/records'', model);

$type不论值如何,都会在chrome流量监听器上每次删除该属性。

有一些秘密的$除垢剂;)吗?

更新:角度 > = 1.3现在不会删除$ ATTRS。

答案1

小编典典

是的,通过$http服务发送数据时,Angular会删除美元前缀的属性。

$
http服务使用angular.toJson方法将对象序列化为JSON字符串。该方法使用前$符号剥离属性,因为angular在内部使用此表示法(例如,实例方法$save可用于所有ngResource对象)。

快速的解决方法是在将数据传递给之前,手动(使用JSON.stringify)对数据进行字符串化$http

$http.post(''/api/path'', JSON.stringify(model));

AngularJs $ http.post()不发送数据

AngularJs $ http.post()不发送数据

谁能告诉我以下语句为什么不将帖子数据发送到指定的URL?调用了url,但是在打印$ _POST时在服务器上-
我得到一个空数组。如果我在将消息添加到数据之前在控制台中打印消息-它显示正确的内容。

$http.post(''request-url'',  { ''message'' : message });

我也尝试过将数据作为字符串(具有相同的结果):

$http.post(''request-url'',  "message=" + message);

当我以以下格式使用它时,它似乎可以正常工作:

$http({    method: ''POST'',    url: ''request-url'',    data: "message=" + message,    headers: {''Content-Type'': ''application/x-www-form-urlencoded''}});

但是有没有办法用$ http.post()做到这一点-
我是否总是必须包含标头才能使其正常工作?我认为上述内容类型指定了发送数据的格式,但是我可以将其作为javascript对象发送吗?

答案1

小编典典

我在使用asp.net MVC时遇到了同样的问题,并在这里找到了解决方案

AngularJS的 新手之间存在很多困惑,即为什么 $http服务速记函数($http.post()等)似乎无法与
jQuery 等价物(jQuery.post()等) 互换

区别在于 jQueryAngularJS
如何序列化和传输数据。从根本上讲,问题在于您选择的服务器语言无法原生理解AngularJS的传输…默认情况下, jQuery
使用以下命令传输数据

Content-Type: x-www-form-urlencoded

和熟悉的foo=bar&baz=moe序列化。

*但是, *AngularJS 使用以下命令传输数据

Content-Type: application/json

{ "foo": "bar", "baz": "moe" }

不幸的 ,JSON序列化不会对某些Web服务器语言( 特别是PHP)进行 本机反序列化。

奇迹般有效。

// Your app''s root module...angular.module(''MyModule'', [], function($httpProvider) {  // Use x-www-form-urlencoded Content-Type  $httpProvider.defaults.headers.post[''Content-Type''] = ''application/x-www-form-urlencoded;charset=utf-8'';  /**   * The workhorse; converts an object to x-www-form-urlencoded serialization.   * @param {Object} obj   * @return {String}   */   var param = function(obj) {    var query = '''', name, value, fullSubName, subName, subValue, innerObj, i;    for(name in obj) {      value = obj[name];      if(value instanceof Array) {        for(i=0; i<value.length; ++i) {          subValue = value[i];          fullSubName = name + ''['' + i + '']'';          innerObj = {};          innerObj[fullSubName] = subValue;          query += param(innerObj) + ''&'';        }      }      else if(value instanceof Object) {        for(subName in value) {          subValue = value[subName];          fullSubName = name + ''['' + subName + '']'';          innerObj = {};          innerObj[fullSubName] = subValue;          query += param(innerObj) + ''&'';        }      }      else if(value !== undefined && value !== null)        query += encodeURIComponent(name) + ''='' + encodeURIComponent(value) + ''&'';    }    return query.length ? query.substr(0, query.length - 1) : query;  };  // Override $http service''s default transformRequest  $httpProvider.defaults.transformRequest = [function(data) {    return angular.isObject(data) && String(data) !== ''[object File]'' ? param(data) : data;  }];});

AngularJS $http post 传递参数数据的方法

AngularJS $http post 传递参数数据的方法

在cordova开发的时候使用到了$http的post方法,传递的参数服务端怎么都接收不到,搜索了下,发现使用AngularJS通过POST传递参数还是需要设置一些东西才可以!

1、不能直接使用params

例如:

$http({    
method: "POST",    
url: "http://192.168.2.2:8080/setId",    
params: { 
cellphoneId: "b373fed6be325f7"}  
}).success();

当你这样写的时候它会把id写到url后面:

http://192.168.2.2:8080/setId?cellphoneId=b373fed6be325f7"

会在url后面添加"?cellphoneId=b373fed6be325f7",查了些资料发现params这个参数是用在GET请求中的,而POST/PUT/PATCH就需要使用data来传递;

2、直接使用data

$http({ 
   method: "POST", 
   url: "http://192.168.2.2:8080/setId", 
   data: {
 cellphoneId: "b373fed6be325f7"
} }).success();

这样的话传递的,是存在于Request Payload中,后端无法获取到参数

AngularJS $http post

这时发现Content-Type:application/json;charset=UTF-8,而POST表单请求提交时,使用的Content-Type是application/x-www-form-urlencoded,所以需要把Content-Type修改下!

3、修改Content-Type

$http({ 
   method: "POST", 
   url: "http://192.168.2.2:8080/setId", 
   data: {cellphoneId: "b373fed6be325f7"},
  headers: { ''Content-Type'': ''application/x-www-form-urlencoded'' }
 }).success();

AngularJS $http post

这时数据是放到了Form Data中但是发现是以对象的形式存在,所以需要进行序列化!

4、对参数进行序列化

$http({ 
   method: "POST", 
   url: "http://192.168.2.2:8080/setId", 
   data: {cellphoneId: "b373fed6be325f7"}, 
  headers: { ''Content-Type'': ''application/x-www-form-urlencoded'' }, 
    transformRequest: function(obj) { 
   var str = []; 
   for (var s in obj) { 
   str.push(encodeURIComponent(s) + "=" + encodeURIComponent(obj[s])); 
   } 
   return str.join("&"); 
  } 
 }).success(); 

以上这篇AngularJS $http post 传递参数数据的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。

您可能感兴趣的文章:
  • 解决angular的$http.post()提交数据时后台接收不到参数值问题的方法
  • 对比分析AngularJS中的$http.post与jQuery.post的区别
  • Angularjs中$http以post请求通过消息体传递参数的实现方法
  • 后端接收不到AngularJs中$http.post发送的数据原因分析及解决办法
  • AngularJS下$http服务Post方法传递json参数的实例
  • AngularJS $http模块POST请求实现
  • angularJS 发起$http.post和$http.get请求的实现方法
  • AngularJS封装$http.post()实例详解
  • 深入理解Angularjs中$http.post与$.post
  • Angular利用HTTP POST下载流文件的步骤记录

我们今天的关于AngularJS $http post 传递参数数据angular url传参的分享已经告一段落,感谢您的关注,如果您想了解更多关于AngularJs $ http.post()不发送数据、AngularJS $ http.post删除属性、AngularJs $ http.post()不发送数据、AngularJS $http post 传递参数数据的方法的相关信息,请在本站查询。

本文标签: