2014-10-09 37 views
0

我在jQuery中使用jsonp ajax請求發送一些數據。當由於某種原因無法處理這些數據時,我想返回一個不爲200的http狀態的結果。這樣我可以使用我的訪問日誌來解析它們的統計信息。關於http錯誤的JSONP responseText

不幸的是,當狀態碼不是200時,雖然jQuery回調位於響應正文中(當我檢查螢火蟲時),但我沒有得到任何迴應。有沒有辦法來獲得迴應?

$.ajax({ 
    type: 'GET', 
    url: '{{ sendMsgUrl }}', 
    async: false, 
    data: { 'form': formData }, 
    dataType: 'jsonp', 
    success: function(json2) { 
     if (json2.status == 'ok') 
      // do stuff 
     else { 
      // output error 
     }; 
    }, 
    error: function(xhr, status, error) { 
     // this doesn't work: it never gets here 
     alert(xhr.responseText); 
     var json2 = eval("("+xhr.responseText+")"); 
    } 
}).fail(function(jqXhr) { 
    // never gets here either 
    alert('status '+jqXhr.responseJSON); 
}); 
+0

我沒有在文檔中看到'jqXhr'有字段'responseJSON' – Regent 2014-10-09 12:20:20

+0

你能分享你得到的錯誤嗎 – Amy 2014-10-09 13:03:06

回答

2

編號JSONP不使用XHR。它向頁面中注入一個<script>元素。

理論上,您可能能夠找到該腳本的error事件處理程序,但它不會針對跨源請求觸發(並且在使用JSONP時沒有太多意義,原產地請求)。

使用JSONP時,您將永遠不會在任何事件處理程序中獲得任何HTTP響應標頭的詳細信息。

+0

這也是我的結論。我的確在做一個跨域請求。所以我的解決方案繞過這個問題現在是在服務器腳本返回錯誤時返回代碼200。當一切正常時,它返回202(接受)。 jsonp現在可以正常運行,而且我仍然可以在訪問日誌中發揮作用。這可能不完全是http狀態代碼的方式,但是對於我的應用程序來說這是可行的。 – rolandow 2014-10-13 07:07:16