我在对play2.1-server进行一些短轮询ajax()-请求时遇到了一些奇怪的错误。
目前,我正在使用REST向服务器发送请求,并等待json作为答案。服务器总是响应正确的JsonP,但过了很短时间,客户端就会收到一个"parserror",并停止为以下所有请求调用ajax回调方法。
客户:
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 + ")");
}
根据Fiddler Web Debugger的说法,服务器总是发送相同(且正确)的jsonp字符串。并且每秒都会调用来自客户端的restGet方法。
客户端在崩溃后立即打印出以下内容:
[17:46:24.036] jqXHR: {"readyState":4,"status":200,"statusText":"success"}
[17:46:24.036] restGet error: parsererror - Error: callbackMethod was not called
我不知道我的代码出了什么问题,我发现的其他关于parserror的帖子总是说你必须使用jsonp而不是json。我就是这么做的,不是吗?
函数名称不应加引号。
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);
}
});
}