2013-03-20 59 views
0

我做了以下jQuery.ajax()調用一個產品我無法控制:處理生的JavaScript在返回阿賈克斯誤差函數儘管200 OK

$.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,但不是成功函數,而是以錯誤結束,響應變量設置爲「error」,replyxhr變量設置爲Object {readyState = 0,status = 0,statusText =「error」}。

試圖通過手動郵差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:「腳本」;它使用隱式GET而不是POST,並且有問題的URL不支持GET。

有沒有其他的選擇我錯過了?

回答

0

寫完我自己的xhr調用(sans錯誤處理)來允許這個。一個可怕的問題的可怕解決方案。 (雙重失敗的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; 
     } 
    } 
} 
0

根據響應的content-type,我打算猜測你是在告訴Ajax期望text,但它正在獲得其他內容。它似乎服務器給你的Javascript,所以我不會感到驚訝,如果內容類型是text/javascript

我從來沒有來處理這個,但如果這是你的問題,你的文檔說是有jQuery中1.5的解決方案和更高:

多個,空間分隔值:作爲jQuery 1.5中,jQuery可以將ContentType類型頭中的數據類型轉換爲 ,您可以將其轉換爲您需要的 。例如,如果您希望將文本響應視爲 XML,請將「text xml」用於dataType。您還可以創建JSONP 請求,將其作爲文本接收,並由jQuery將其解釋爲XML: 「jsonp text xml」。類似地,諸如「jsonp xml」的簡寫字符串將首先嚐試從jsonp轉換爲xml,並且,如果不成功,則 將從jsonp轉換爲文本,然後從文本轉換爲xml。

通過 http://api.jquery.com/jQuery.ajax/

(見的dataType的DOC)

這意味着你可以會使用這樣的:dataType: "script text"有解釋爲文字一個JavaScript響應。當然,您也可以使用dataType: "script"將其解釋爲腳本。