Подтвердить что ты не робот

Jquery getResponseHeader всегда возвращает 'undefined'?

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

Код:

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

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

4b9b3361

Ответ 1

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

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

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

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

Access-Control-Expose-Headers: Location

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

Ответ 2

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

Ответ 3

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

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