angular ajax get post 参数,Angular的Post 传递参数问题及解决方法
一、傳遞參數過程中POST會出問題,問題來源:
我們都知道向后臺傳參可以使用get、post,其形式類似于name=iyy&id=001 。但是在angular中卻發現使用$http post 進行異步傳輸的過程中后臺是接收不到數據的,其實這個問題就是因為請求頭的緣故。在angular中默認的請求頭是“Content-Type":"application/json",也就是說傳遞參數是使用json格式。但后臺默認的卻是Content-Type': 'application/x-www-form-urlencoded'。因此在這樣的情況下后臺接收到的數據就會是空的。
那么為什么使用get形式就可以傳參呢?因為get這個鍵的值是一個字符串map或對象,會被轉換成查詢字符串追加在URL后面。如果不是字符串,會被json序列化,可以理解為在get中參數的傳遞是直接追加在utl后面的,那么此時參數形式{“id”:"1","name":"yy"}會被轉化成id=1&name=yy追加在url后面,后臺就直接獲取到了。
Jquery、原生Ajax:
頭: Content-Type: application/x-www-form-urlencoded 傳輸數據 都認(經典所有服務器都認)
Angular Js:
application/json 新潮--部分服務器默認不支持
解決方法:
配置angularJs 庫
配置AngularJs的POST方式
a. 修改請求頭:
$http({
url,
method,
data,
headers:{ 'Content-Type':'application/x-www-form-urlencoded ' }
})
b: 修改傳遞內容:
transformRequest 傳進去一個obj,返回一個編碼編號
$http({
transformRequest(obj){
return "要傳輸的字符串"
//obj=>{a:"12", b:"5"}
//return "a=12&b=5"
let att= [];
for(let name in obj){
arr.push(`$(name)=$(obj[name])`);
}
return arr.join('&');
}
})
如把{a: 12, b:5 } =>"a=12&b=5"
c: 完整寫法(一個完整寫法、直接在module配置一次即可):
var app = angular.module('app',[]);
//方法,修改ng的請求頭
app.config(function($httpProvider){
$httpProvider.defaults.transformRequest=function(obj){
let arr =[];
for(let name in obj){
arr.push(`${name}=${obj[name]}`);
}
return arr.join('&');
};
$httpProvider.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded';
});
app.controller('ctrl',function($scope,$resource,$q,$http){
var defer = $q.defer();
var promise = defer.promise;
$http({
method: "post",
data:$.param({"id":"1","name":"jyy"}),
url:"1.php"
}).success(function(data){
defer.resolve(data);
});
promise.then(function(data){
$scope.data = data;
})
})
總結
以上是生活随笔為你收集整理的angular ajax get post 参数,Angular的Post 传递参数问题及解决方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 《绍古辞》第十句是什么
- 下一篇: from 下拉框多个值提交_Git co