2015-02-05 55 views
2

我對使用AngularJs的特定「PUT」Ajax請求(RESTFul服務)有麻煩。400錯誤請求只使用AngularJs,與jQuery一起工作

同一段代碼適用於jQuery和普通JavaScript。

$http({ 
    method: "PUT", 
    url: "https://XXXXXXXXXXXXXX/api.php?rquest=updateUuid", 
    headers: { 
     "Content-type": "text/plain", 
     Authorization: "Basic " + btoa(email + ":" + password) 
    }, 
    data: { 
     Email: email, 
     Uuid: login_response.uuid 
    } 
}).success(function(response) { 
    console.log(response); 
}); 


jQuery.ajax({ 
    method: "PUT", 
    url: "https://XXXXXXXXXXXXXX/api.php?rquest=updateUuid", 
    headers: { 
     "Content-type": "text/plain", 
     Authorization: "Basic " + btoa(email + ":" + password) 
    }, 
    data: { 
     Email: email, 
     Uuid: login_response.uuid 
    } 
}).done(function(response){ 
    console.log(response) 
}); 

服務器與JSON對象作出響應,但第一個代碼(AngularJs)似乎工作有點不同。 在我沒有設置Content-Type標題之前,我收到一個CORS問題(與jQuery一起工作,但AngularJs將content-type設置爲「application/json」並導致錯誤)。

我得到了第一部分固定設置內容類型爲文本/平原,但現在我得到一個400 Bad Request Error(僅限於AngularJs)。我也嘗試使用攔截器來刪除transformRequest,但它不起作用。

我使用AngularJs錯了嗎?因爲我在想,unlinke jQuery,它在後臺做了額外的「東西」,做了一些額外的頭文件或沒有正確地傳遞數據。

當我沒有將任何數據傳遞給RESTful服務時,通常會出現該錯誤。

我在學習AngularJs,所以我寧願用它代替jQuery。 任何幫助將不勝感激。

非常感謝

+0

使用Wireshark查看每種情況下傳遞的標題。 – kamituel 2015-02-05 14:18:25

+0

只需比較兩種情況下發送的標頭。它們是有區別的。 – dfsq 2015-02-05 14:22:50

+0

我考慮過這樣做,但我正在用攔截器調試,記錄每個調用的配置對象和響應。 從我所看到的情況看,一切都是正確的,但實際上它不起作用 – Zorgatone 2015-02-05 14:23:12

回答

1

我得到了它,jQuery的是自動序列化數據對象應用程序/ x-WWW窗體-urlencoded,AngularJs是不是......

工作代碼:

$http({ 
    method: "PUT", 
    url: "https://XXXXXXXXXXXXXX/api.php?rquest=updateUuid", 
    headers: { 
     Accept: "*/*", 
     "Content-Type": "application/x-www-form-urlencoded", 
     Authorization: "Basic " + btoa(email + ":" + password) 
    }, 
    data: jQuery.param({ 
     Email: email, 
     Uuid: login_response.uuid 
    }) 
}) 

無論如何,這看起來不太好,但它的工作至少.. 任何人都知道更好的方式讓AngularJs發送序列化數據爲x-www-form-urlencoded?