1
我通過做一些短輪詢ajax() - 對play2.1-server的請求,遇到了一些奇怪的錯誤。非確定性parsererror
目前我使用REST來向服務器發送一個請求,我等待一個JSON作爲答案。服務器總是響應正確的JsonP,但是在很短的時間之後,客戶端得到一個「parseError」,並停止爲所有後續請求調用ajax-callback方法。
客戶:
function restGet(url, callback) {
$.ajax({
type: 'GET',
url: 'www. ... /getQuestions/42',
dataType: 'jsonp',
jsonpCallback: 'callbackMethod',
success: 'callbackMethod',
error: function (jqXHR, status, exception) {
console.log('jqXHR: ' + JSON.stringify(jqXHR));
console.log('restGet error: ' + status + ' - ' + exception);
}
});
}
function callbackMethod(response) {
console.log('At callbackMethod(' + JSON.stringify(response) + ')');
}
服務器:
public static Result getQuestions(String lectureId) {
String callbackMethod = request().getQueryString("callback");
String json = "{\"question\":\"Do you find my error?\"}";
return ok((callback == null)?json:callback + "("+ json + ")");
}
根據提琴手Web調試服務器始終發送相同的(正確)JSONP字符串。每秒都會調用客戶端的其餘Get方法。
客戶端打印出只要它崩潰了以下內容:
[17:46:24.036] jqXHR: {"readyState":4,"status":200,"statusText":"success"}
[17:46:24.036] restGet error: parsererror - Error: callbackMethod was not called
我不知道什麼是錯我的代碼和其他職位,我發現約parsererror總是說你有,而不是使用JSONP做JSON。這就是我所做的,是嗎?
'success'應該是一個函數,而不是一個字符串,但'jsonpCallback'可以是一個字符串。從doc:「爲JSONP請求指定回調函數名稱...您也可以使用此設置的函數,在這種情況下,jsonpCallback的值設置爲該函數的返回值。」 http://api.jquery.com/jQuery.ajax/ –
@JasonP謝謝,解決了這個問題。儘管我懷疑他不應該爲了兩個目的而使用相同的回調函數。通常你只是讓jQuery使用其內部的JSONP回調函數。 – Barmar
感謝您的快速響應。我會試一試。 – user2584032