這裏是我的Ajax調用:jQuery的阿賈克斯不發送Accept頭
function fetchAccount(email, callback) {
$.ajax({
url: "http://example.com/",
jsonp: "callback",
dataType: 'jsonp',
type: 'GET',
async: false,
headers: {"Accept" : "application/javascript; charset=utf-8"},
success: function(data) {
appState.user = data;
appState.viewState = AppStates.CONTENT_VIEW;
AppStore.persistToLocalStorage();
callback();
},
error: function(xhr, status, err) {
appState.user = "";
appState.viewState = AppStates.LOGIN_FAIL_VIEW;
AppStore.persistToLocalStorage();
callback();
}
});
};
我的心不是服務器返回JSONP因爲接受頭實際上沒有正確設置。當我使用「修改標題」谷歌瀏覽器擴展名手動注入「接受」「應用程序/ JavaScript的;字符集= utf-8」服務器響應JSONP就好了。
我拍攝的請求頭,並如預期,「接受」被正確設置的心不是:
GET /api/accounts/[email protected]?callback=jQuery22009572079558856785_1454040030107&_=1454040030108 HTTP/1.1
Host: www.example.com
Connection: keep-alive
Accept: */*
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.97 Safari/537.36
Accept-Encoding: gzip, deflate, sdch
Accept-Language: en-US,en;q=0.8,et;q=0.6
這是怎麼回事 - 我怎樣才能得到它正確設置accept頭?這似乎很簡單...
糟糕,我試圖解決這個問題,並從interwebs複製一個壞榜樣。這是正確的內容類型,它仍然失敗......見上面 – Patrick
@Patrick你確定你需要JSONP,而不是JSON。如果您向與網頁相同的域中的服務器發出請求,則應該使用普通的JSON。 JSONP是避開跨源策略的較早方式。如果支持的話,今天更好的方法是使用CORS。但是,如果服務器位於同一個域中,則不需要執行任何操作。 – tvanfosson
服務器在這裏很好 - 我正在申請application/json並獲得它。糾正它後,應用程序/ JavaScript我仍然得到相同的結果。 – Patrick