我有一个我通过ajax提交的表单。我正在使用jquery表单插件。我想要做的是获取从我的服务器返回的'Location'标题。我可以在萤火虫中看到它。但是每当我在成功回调中调用getResponseHeader()函数时,它总是返回'undefined'..
代码:
form.ajaxForm({
dataType: 'xml',
data: {format: 'xml'},
resetForm: true,
success: function(xml,status,xhr){
var location = xhr.getResponseHeader('Location');
alert(location);
});
位置未定义。但我可以在萤火虫中看到“位置”标题。我错过了什么?即使我从xhr对象调用getAllResponseHeaders(),它也会返回'undefined'
答案 0 :(得分:31)
如果这是CORS request,您可能会在调试工具中看到所有标题(例如Chrome-> Inspect Element-> Network),但xHR对象只会检索标题(通过{{1如果这样的标题是simple response header:
xhr.getResponseHeader('Header')
Content-Type
Last-modified
Content-Language
Cache-Control
Expires
如果它不在此集中,则它必须出现在服务器返回的Access-Control-Expose-Headers标头中。
关于有问题的情况,如果它是一个CORS请求,那么当且仅当下面的标题也存在时,才能检索到Pragma
对象的Location
标题:
XMLHttpRequest
如果它不是CORS请求,Access-Control-Expose-Headers: Location
将检索它没有问题。
答案 1 :(得分:6)
XMLHttpRequest将transparently follow a redirect,因此最终请求将没有标题,它已经跟随重定向并且您正在看到来自的响应标头 request(不是具有Location
标头的初始请求)。
答案 2 :(得分:4)
我正在做类似的事情,使用rails / rest方式将带有Location头的201“created”返回给新对象和一个空体。 jQuery的ajax方法在遇到这个问题时会抛出一个“parseerror”,因为它期待json但什么都没有回来。我只是在我的错误回调中捕获201重定向,如下所示:
function request_error(req, textStatus, errorThrown)
{
if (req.status == 201 ) {
var created_loc = req.getResponseHeader('Location');
console.log('(201) created: ' + created_loc);
// ... manual redirect here i.e. issue another ajax request to created_loc
return;
}
// ... handle an actual error here
}
希望这有帮助!