2015-12-02 41 views
2

我正在使用JSONP進行AJAX調用,該調用失敗並且沒有報告的原因。我們正在監視正在調用的服務器上正在發生的事情,並看到AJAX正在添加到URL中,這可能會增加我們的問題。AJAX添加到網址字符串

返回的數據應該是JSON。從瀏覽器調用URL時,如果從調用以下代碼的頁面返回,則返回「未定義」錯誤,表示沒有錯誤報告。

$.ajax({ 

    url: 'http://foo:8080/playlist', 
    type: 'GET', 
    crossDomain: true, 
    dataType: 'jsonp', 
    jsonp : false, 
    success: function(data){ 

     //Writes return data to UI 
     writeToUI(text.html(JSON.stringify(data))); 

    }, 
    error: function(e){ 

     alert(e.message); 
    } 

}); 

在觀看被稱爲服務器,我們看到現在的網址爲「http://foo:8080/playlist?._=1449088167560」。

我們認爲URL上的額外信息可能會導致API在服務器上失敗,但是想要查看這是從哪裏來的,以及是否有辦法將其關閉?

想法?

史蒂夫

回答

1

_=1449088167560從jQuery的,因爲您所指定的datatypejsonp到來。有關更多信息,請參閱jQuery.ajax文檔。具體看cache參數說明:

緩存(默認:true, false for dataType 'script' and 'jsonp') 類型:Boolean 如果設置爲false,這將迫使請求的頁面不被瀏覽器緩存。注意:將緩存設置爲false只能在HEAD和GET請求中正常工作。它通過在GET參數中附加「_ = {timestamp}」來工作。其他類型的請求不需要該參數,除了在IE8中對POST已經請求的URL進行POST時以外。

因爲你使用jQuery的jsonp自動追加此參數以防止緩存,通常出現在GET請求的網頁結果。這就是_=1449088167560的來源。我從來沒有在jQuery內部查看過這段代碼,但我相信它從時間戳(可能是UNIX時間戳值)生成了這個數字。

至於修復此,我想你可以試試cache參數專門設置true像這樣:

$.ajax({ 
    url: 'http://foo:8080/playlist', 
    type: 'GET', 
    crossDomain: true, 
    dataType: 'jsonp', 
    jsonp : false, 
    cache: true, 
    success: function(data){ 
     //Writes return data to UI 
     writeToUI(text.html(JSON.stringify(data))); 
    }, 
    error: function(e) { 
     alert(e.message); 
    } 
}); 

這是正常的GET請求的默認,並應防止額外的參數被追加。

另一件要檢查的值是隱藏在您的url中的?_值之間的明顯.值:http://foo:8080/playlist?._=1449088167560。我不確定這是否是您在問題中粘貼的錯誤,但肯定會導致您的錯誤。通常情況下,除非服務器正在專門查找關鍵字是_的參數,否則在url中使用額外的參數應該沒有區別。然而,使用.,我認爲這在技術上是一個無效的URI字符串。

+0

謝謝。 '''是我的一個錯誤。好的發現。 我試圖添加「緩存:真」,它仍然沒有返回。不知道這個問題是什麼。 有沒有一個JSFiddle類型的地方,我可以測試AJAX調用?也許如果有一個工作的網址來測試,以確保它不是我們的電話? – SteveV