jquery getResponseHeader总是返回’undefined’?

我有一个表格,我通过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’

如果这是一个CORS请求 ,您可能会看到调试工具中的所有标题(例如Chrome-> Inspect Element-> Network),但xHR对象只会检索标题(通过xhr.getResponseHeader('Header') )标头是一个简单的响应标头 :

  • Content-Type
  • Last-modified
  • Content-Language
  • Cache-Control
  • Expires
  • Pragma

如果它不在此集中,则它必须存在于服务器返回的Access-Control-Expose-Headers标头中。

关于这个案例,如果它是一个CORS请求,那么当且仅当下面的标题也存在时,才能检索到XMLHttpRequest对象的Location头:

 Access-Control-Expose-Headers: Location 

如果它不是CORS请求, XMLHttpRequest将检索它没有问题。

XMLHttpRequest将透明地遵循重定向 ,因此最终请求将不具有标头,它已经遵循该重定向并且您正在看到来自请求的响应标头(而不是具有Location标头的初始请求)。

我正在做类似的事情,使用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 ie issue another ajax request to created_loc return; } // ... handle an actual error here } 

希望这可以帮助!