2015-05-14 48 views
2

當我運行它時,它會因某種原因發送兩個請求。當我刪除headers對象時,雖然它只運行一次。爲什麼它會使用標題對象運行兩次?如果設置了標頭對象,jQuery.ajax()會多次發送請求

$.ajax({ 
    type: "get", 
    headers: { 
     Time: time 
    }, 
    url: getHost() + "/leaderboard/top?gameId=" + gameId + "&token=" + createToken([gameId, time]), 
    dataType: "json", 
    complete: function(data){ 
     showOutput(JSON.parse(data.responseText)); 
    } 
}); 

當我看到在Chrome網絡檢查,我看到下一個Method說:GET,另一個說:OPTIONS。除此之外,請求完全相同。

在服務器上,我有以下標題設置:

this.res.setHeader("Content-Type", "text/json; charset=utf-8"); 
this.res.setHeader("Access-Control-Allow-Origin", "*"); 
this.res.setHeader("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept, Time"); 
+0

這可能會幫助你:http://stackoverflow.com/questions/5544422/jquery-ajax-executed-twice –

+0

這是預檢請求。 –

+0

順便說一句,你可以用'text/plain'的內容類型而不是'text/json'來觸發一個非預檢的請求。 –

回答

1

在某些情況下(在這種情況下,時間標頭的禮物)一個pre-flight OPTIONS請求首先發送跨起源GET請求,以確保接收服務器接受這些類型的請求。

對跨源資源共享和同源策略進行一些閱讀。

+0

我已更新與我正在使用的服務器標題的問題。這些標題是你在說什麼? –

+0

@TheBoogieMan沒有在Ajax請求中設置標題。 – Musa