好吧,簡單JSONP設置與jQuery,與要求建立了我超越了搜索術語「靜態」的網址:jQuery的「parseerror」靜態JSONP回調函數
function handleJSONPResponse (data, status, request) {
// update UI
}
$(function() {
$('#some-input').on('keyup', function() {
$.ajax('http://www.example.com/service/', {
dataType : 'jsonp',
jsonpCallback : 'handleJSONPResponse',
data : {
search : $('#some-input').val()
},
complete : function (xhr, status) {
if (status === 'parsererror') {
console.log(xhr.responseText)
}
}
});
});
當用戶按下按鍵,它們請求被解僱。就這個問題而言,如果「hamme」在我們只是想要撥打電話(我在真實的代碼中處理過這個問題)之後返回,那並不重要。我的問題是這樣的......有時,特別是在頻繁的按鍵,我沒有得到一個UI更新,我得到的是被記錄到我的控制檯的錯誤看起來是這樣的:
handleJSONPResponse({"JSON" : "Some Data"})
所以,你可以看到,jQuery的響應文本沒問題,但它仍然導致了一個parseError。我還驗證了JSON內容是確定的。 讓我強調一下,有時候「錘子」的JSONP起作用,有時候「錘子」的JSONP失敗。它不是後端錯誤;我總是在我的xhr.responseText中獲得看起來像有效的JSONP響應。
我試過這與JSONP回調處理程序傳遞到Ajax請求的「成功」參數,但這不會更改操作。我唯一能做的就是防止出現這個錯誤,就是刪除指定的JSONP回調名稱並讓jQuery隨機創建一個名稱,但是我的緩存層有一個要求,即我必須保持URL靜態,因此需要一個靜態回調名稱。
我該怎麼做,以確保我不會隨機獲取parseError從jQuery失敗?
這裏你可以看到一個例子:
的的jsfiddle「回聲」 JSONP產生錯誤遠遠頻率低於我的本地服務,但是如果你在錘它,你會看到一些「handleJSONPResponse未定義「錯誤通過您的控制檯...
說明: 跨域是必需的,所以任何不是跨域不起作用。對不起,除了使用JSONP作爲我的標準而不是普通的Ajax請求之外,我沒有在第一個示例中做出更清晰的說明。
不幸的是,這不是一個選項。 $ .getScripts()只是$ .ajax()的包裝,它不是跨域的。如果您使用crossDomain:true參數來強制它,那麼它只是轉換爲以任意方式創建一個隨機命名的JSONP請求。 –
@JonHartmann'$ .getScript'因爲同樣的原因可以很好的跨域運行''的作品。 –
如果您使用'dataType:「jsonp」',那麼您不能使用您想要的靜態函數,因爲jQuery將爲您創建一個靜態函數。 –