Ben*_*ter 6 ajax jquery xmlhttprequest
我正在使用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)
});
};
Run Code Online (Sandbox Code Playgroud)
这里我只返回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({});
});
Run Code Online (Sandbox Code Playgroud)
服务器返回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
Run Code Online (Sandbox Code Playgroud)
但是,XmlHttpRequest在jQuery AJAX回调中传递的对象中缺少Location标头.
Ben*_*ter 13
问题是这是一个CORS请求,根据CORS规范,只有以下"简单响应标头"暴露:
要公开其他标头,您需要将它们包含在Access-Control-Expose-Headers标头中,例如:
Access-Control-Expose-Headers: location
Run Code Online (Sandbox Code Playgroud)
完成此更改后,Location标头可通过XmlHttpRequest对象使用getResponseHeader("Location").
对于正常(非CORS)请求,这不是问题.
您是手动添加位置标头,还是期望服务器脚本自动返回它?因为实际上可能没有设置。
除非你要重定向,否则我预计它不会被设置,而 Chrome 实际上可能只是将它本身添加为“有帮助”。
也许只是尝试在脚本中显式设置位置标头,那么它肯定应该在那里,但这可能会产生不良的副作用。
| 归档时间: |
|
| 查看次数: |
2777 次 |
| 最近记录: |