jquery getResponseHeader总是返回'undefined'?

时间:2010-12-06 19:07:15

标签: jquery ajax xmlhttprequest jquery-forms-plugin

我有一个我通过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'

3 个答案:

答案 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
}

希望这有帮助!