jQuery getResponseHeader всегда возвращает «неопределенный»? - PullRequest
16 голосов
/ 06 декабря 2010

У меня есть форма, которую я отправляю через ajax. Я использую плагин формы jquery. Я пытаюсь получить заголовок «Местоположение», который возвращается с моего сервера. Я вижу это в клопе. Но всякий раз, когда я вызываю функцию getResponseHeader () в моем успешном обратном вызове, она всегда возвращает «неопределенное»

Код:

form.ajaxForm({
  dataType: 'xml',
  data: {format: 'xml'},
  resetForm: true,
  success: function(xml,status,xhr){
    var location = xhr.getResponseHeader('Location');
    alert(location);
  });

местоположение не определено. Но я вижу заголовок «Местоположение» в Firebug. Что мне не хватает? Даже если я вызываю getAllResponseHeaders () из объекта xhr, он возвращает 'undefined'

Ответы [ 3 ]

31 голосов
/ 16 марта 2013

Если это CORS-запрос , вы можете увидеть все заголовки в инструментах отладки (таких как Chrome-> Inspect Element-> Network), но объект xHR будет получать только заголовок (через * 1003) *) если такой заголовок является простым заголовком ответа :

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

Если его нет в этом наборе, он должен присутствовать в заголовке Access-Control-Expose-Headers , возвращаемом сервером.

В данном случае, если это запрос CORS, можно получить заголовок Location через объект XMLHttpRequest только в том случае, если также присутствует указанный ниже заголовок:

Access-Control-Expose-Headers: Location

Если это не запрос CORS, XMLHttpRequest не будет иметь проблем с его получением.

6 голосов
/ 06 декабря 2010

XMLHttpRequest будет прозрачно следовать за перенаправлением , поэтому запрос final не будет иметь заголовка, он уже соответствует этому перенаправлению, и вы видите заголовки ответа от этот запрос (не первоначальный запрос с заголовком Location).

4 голосов
/ 28 февраля 2011

Я делаю нечто подобное, используя способ rails / rest для возврата 201 «созданного» с заголовком Location нового объекта и пустым телом.ajax-метод jQuery будет генерировать «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
}

надеюсь, это поможет!

...