[英]AJAX request returns 200OK but fails despite return data being JSON
[英]Handling raw JavaScript being returned to .ajax error function despite 200 OK
我正在對無法控制的產品進行以下jQuery.ajax()調用:
$.ajax({
type: "POST",
url: "/WfWsR",
data: { method: 'getInfo',
nodeID: nodeID
},
dataType: "text",
success: function(data, response, replyxhr){
return data;
},
error: function(replyxhr, response){
console.log(response);
console.log(replyxhr);
return response;
}
});
POST以200 OK成功,但沒有轉到成功函數,而是以錯誤形式結束,將響應變量設置為“錯誤”,將replyxhr變量設置為Object {readyState = 0,status = 0,statusText =“錯誤”}。
通過郵遞員手動嘗試POST會產生以下結果:
new Array(
new Array(
new Array(
"15", "1", ""
)
),
new Array(
new Array(
"1", "3757", "3757", "user", "2013-01-22 15:09:04.354"
)
),
new Array(
),
new Array(
"3762", "ABCD", "test Purge Documents", "50", "purge Documents", "Administrator", "2013-01-22 15:07:57.065"
), "13d886ddf90"
)
有很多JavaScript; 從技術上講,我只需要這些陣列中的任何一個。 我認為它在jQuery中不起作用的原因是,這種返回可能無效,尤其是考慮到dataType:“ text”。 但是我也不能使用dataType:“ script”; 使用隱式GET而不是POST的網址,所涉及的網址不支持GET。
我還有其他選擇嗎?
我要猜測的是,根據響應的content-type
,您正在告訴Ajax期待text
但它還有其他作用。 看來服務器正在提供Javascript,所以如果content-type為text/javascript
,我不會感到驚訝。
我從來沒有處理過,但是如果這是您的問題,文檔確實會說jQuery 1.5及更高版本中有一個解決方案:
多個用空格分隔的值:從jQuery 1.5開始,jQuery可以將dataType從在Content-Type標頭中接收的dataType轉換為所需的dataType。 例如,如果您希望將文本響應視為XML,請對數據類型使用“文本xml”。 您還可以發出JSONP請求,將其接收為文本,並由jQuery解釋為XML:“ jsonp text xml”。 同樣,速記字符串(例如“ jsonp xml”)將首先嘗試從jsonp轉換為xml,然后,嘗試從jsonp轉換為文本,然后從文本轉換為xml。
通過http://api.jquery.com/jQuery.ajax/ (有關數據類型,請參閱文檔)
這意味着您可以使用以下命令: dataType: "script text"
將Javascript響應解釋為文本。 當然,您也可以只使用dataType: "script"
將其解釋為腳本。
最終寫了我自己的xhr調用(沒有錯誤處理)以允許這樣做。 解決一個可怕問題的好方法。 (兩次對eval()失敗)。
var xhReq = new XMLHttpRequest();
var params = "method=getInfo&nodeID=" + nodeID;
xhReq.open("POST", "/WfWsR", true);
xhReq.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
xhReq.onreadystatechange = onPostSubmit;
xhReq.send(params);
var response = eval(xhReq.response);
var stepIDx = response[0][0][0];
return stepIDx;
function onPostSubmit() {
if (xhReq.readyState==4 || xhReq.readyState=="complete") {
if (xhReq.status != 200) {
alert('BadStatus');
return;
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.