【发布时间】:2016-01-29 12:36:08
【问题描述】:
这是我的 ajax 调用:
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;charset = utf-8”时,服务器响应 JSONP 就好了。
我捕获了请求标头,正如预期的那样,“接受”没有正确设置:
GET /api/accounts/myemail@gmail.com?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
这里发生了什么 - 我怎样才能让它正确设置接受标头?看起来很简单……
【问题讨论】:
标签: javascript jquery ajax jsonp