2011-07-07 37 views
6

我請求與阿賈克斯的URL導致HTTP標頭碼500我希望它可以觸發誤差函數:jQuery的Ajax錯誤回調不點火

$.ajax({ 
    url: "http://xxx", 
    dataType: "jsonp", 
    crossDomain: true, 
    success: function(data) { 
     alert('success'); 
    }, 
    error: function() { 
     alert('error'); 
    } 
}); 

這個工作在Safari,但在失敗鉻和火狐。

我在做什麼錯?

這是最新的jquery 1.4.X,其原因我不能升級到更高版本..

的響應發送一個HTTP代碼500,內容類型application/JSON和內容:

jsonp1310063232212({ 「error」:{「reason」:「User not found」}})

+0

我不確定此版本的jQuery是否可以檢測到JSONP錯誤。嘗試設置超時請求。如果在超時過期後沒有收到結果,則可能會調用回調。 –

+0

謝謝,但沒有改變。沒有錯誤回調,沒有成功的回調。還添加了ajaxError方法,但也沒有被調用。 – Wesley

回答

3

看起來像crossDomain:直到jQuery 1.5才加入。

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

跨域(加入1.5)

默認值:false 對於相同域的請求,爲真 跨域請求。

如果你想在同一個域 力跨域請求(如 JSONP),跨域的 值設置爲true。這 允許,例如,服務器端 重定向到另一個域

像馬丁Larente在他的評論暗示,它可能是有多麼的不同瀏覽器的問題或者jQuery的檢測/報告JSONP錯誤。

6

正如JQuery文檔[1]中所述,不會爲跨域腳本和JSONP請求調用錯誤處理程序。它工作(並非總是)舊版本的JQuery。

我解決使用緊湊和有效的插件,其中包括一個不錯的錯誤處理程序: http://code.google.com/p/jquery-jsonp/

下載它,並把它添加到頭部:

<script src="javascripts/jquery.jsonp-2.2.0.min.js" type="text/javascript"></script> 

然後你可以使用函數$ .jsonp()類似於$就():

$.jsonp({ 
    url: "http://xxx?callback=?", 
    data: { 
     var: 'test' 
    }, 
    cache: false, 
    success: function(data, textStatus) { 
     // ... 
    }, 
    error: function(xOptions, textStatus) { 
     console.log('Error'); 
     // ... 
    } 
}); 

[1] http://api.jquery.com/jQuery.ajax/

+0

我卡住了使用舊版本的jquery(1.8.2),並切換到jsonp函數爲我工作。 –