【发布时间】:2013-02-07 23:58:06
【问题描述】:
我正在使用 jQuery 执行 AJAX POST,如下所示:
self.post = function (path, data) {
return $.ajax({
url: this.createUri(path),
type: "POST",
contentType: "application/json",
dataType: "json",
data: ko.toJSON(data)
});
};
这里我只返回 AJAX Deferred 对象。响应由另一个对象处理:
api.post(menuItemsUri, self.newItem)
.done(function (data, textStatus, request) {
console.log(request.getResponseHeader("Location")); // undefined
})
.always(function () {
// reset the current item
self.newItem.update({});
});
服务器返回一个201 Created 响应并设置Location 标头。我可以在 Chrome 网络标签中看到这一点:
Access-Control-Allow-Origin:*
Cache-Control:no-cache
Content-Length:0
Date:Thu, 07 Feb 2013 10:25:04 GMT
Expires:-1
Location:http://localhost:49978/sites/1/menus/65/items/19
Pragma:no-cache
但是,在 jQuery AJAX 回调中传递的 XmlHttpRequest 对象中缺少 Location 标头。
【问题讨论】:
-
你试过输出
getAllResponseHeaders()的结果来看看里面有什么吗? -
是的:
Pragma, Cache-Control, Expires。 -
好吧,我认为您可能无法发送位置标头,这可能是由于 xmlhttprequest 的工作原理。它可能无法跟随位置标头,因此它可能被忽略甚至不发送。没有把握。你能不能只设置一个名为
New-Location之类的新标题并阅读它?显然这并不理想。
标签: jquery ajax xmlhttprequest