jQuery AJAX POST上缺少Location标头

前端之家收集整理的这篇文章主要介绍了jQuery AJAX POST上缺少Location标头前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在使用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 Response并设置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标头.

解决方法

问题是这是一个CORS请求,根据 CORS Spec,只有以下“简单响应标头”暴露:

>缓存控制
>内容 – 语言
>内容类型
>过期
>最后修改
> Pragma

要公开其他标题,您需要将它们包含在Access-Control-Expose-Headers标题中,例如:

Access-Control-Expose-Headers: location

完成此更改后,Location头可通过getResponseHeader(“Location”)对XmlHttpRequest对象使用.

对于正常(非CORS)请求,这不是问题.

猜你在找的jQuery相关文章