我在將jQuery的$.ajax請求轉換為Angularjs的$http請求(Angularjs v1.8.x)時遇到一個問題。
我有一個帶有一個文本輸入和一個影像/檔案輸入的表單,我正在通過表單的提交按鈕發送請求,并使用ng-click="uploadImage($e)"。
我認為問題在于Angularjs沒有將填充的表單資料與請求一起發送。
我的$.ajax請求作業正常,但對于我的$http請求,在瀏覽器的開發者控制臺中沒有表單資料--見下面的截圖。對我的$http請求的回應是200,但回傳的資料不正確,因為表單資料從未與請求一起發送。
對于$.ajax和$http,我都用這個函式來準備表單資料:
/**.
* @var form是一個HTML元素
*/
function prepData(form) {
var fdata = new FormData() 。
for(var i = 0; i < form.length; i ) {
var NN = form[i].nodeName.toUpperCase() 。
var name = form[i].name。
if(typeof name != "undefined" && name != ") {
if(NN == "INPUT") {
var NT = form[i].type.toUpperCase()。
if(NT == "FILE") {
for(var j = 0; j < form[i].files.length; j ) {
fdata.append(name, form[i].files[j], form[i].files[j].name) 。
}
} else if(NT == "CHECKBOX" || NT == "RADIO") {
if(form[i].checked == true) {
fdata.append(name, form[i].value)。
}
} else {
fdata.append(name, form[i].value)。
}
} else {
fdata.append(name, form[i].value)。
}
}
}
return fdata;
}
$.ajax請求選項:
var ajaxOptions = {
型別。"POST"/span>。
async : true,
url : getFullUrl()。
資料。prepData(form)。
dataType : self.dataType。
beforeSend: function (request) {
request.setRequestHeader("translate", User.settings.lang) 。
request.setRequestHeader("userid", User.logged) 。
}
};
$http請求選項:
var httpOptions = {
型別。"POST"/span>。
async : true,
url : getFullUrl()。
資料。prepData(form)。
dataType : self.dataType。
headers : {
"translate"。User.settings.lang。
"userid"。User.logged。
"X-Requested-With": "XMLHttpRequest",
"Content-Type": undefined,
"transformRequest": []
},
eventHandlers: {
"readystatechange": function(event) {
this.xhr = event.currentTarget;
}
}
};
當我在瀏覽器的開發工具中比較$.ajax和$http時,我可以看到它們的回應頭檔案是相同的,但是請求頭檔案在這些屬性上有所不同(見以下截圖):
AcceptContent-Type。
SCREENSHOT 1 - $.ajax()(jQuery)。
SCREENSHOT 2 - $http()(AngularJS v1.8.x)。
uj5u.com熱心網友回復:
與$.ajax的type: ...相對應的是$http的method: ...。
一般來說,一個$http請求應該看起來像這樣:
var httpOptions = {
method : "POST"。
/...
};
$http(httpOptions).then(function(res) {
//...。
}, function(res) {
//.../span>
});
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/307479.html
標籤:
