2013-07-15 92 views
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。這就是我所做的,是嗎?

回答

0

函數名稱不應引用。

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); 
      } 
     }); 
    } 
+0

'success'應該是一個函數,而不是一個字符串,但'jsonpCallback'可以是一個字符串。從doc:「爲JSONP請求指定回調函數名稱...您也可以使用此設置的函數,在這種情況下,jsonpCallback的值設置爲該函數的返回值。」 http://api.jquery.com/jQuery.ajax/ –

+0

@JasonP謝謝,解決了這個問題。儘管我懷疑他不應該爲了兩個目的而使用相同的回調函數。通常你只是讓jQuery使用其內部的JSONP回調函數。 – Barmar

+0

感謝您的快速響應。我會試一試。 – user2584032