Недопустимый заголовок местоположения на jQuery AJAX POST

Я выполняю AJAX POST с jQuery следующим образом:

self.post = function (path, data) {
    return $.ajax({
        url: this.createUri(path),
        type: "POST",
        contentType: "application/json",
        dataType: "json",
        data: ko.toJSON(data)
    });
};

Здесь я просто возвращаю объект AJAX Deferred. Ответ обрабатывается другим объектом:

api.post(menuItemsUri, self.newItem)
    .done(function (data, textStatus, request) {
        console.log(request.getResponseHeader("Location"));//undefined
    })
    .always(function() {
       //reset the current item
        self.newItem.update({});
    });

Сервер возвращает ответ 201 Created и устанавливает заголовок Location. Я вижу это на вкладке «Сеть Chrome»:

Access-Control-Allow-Origin:*
Cache-Control:no-cache
Content-Length:0
Date:Thu, 07 Feb 2013 10:25:04 GMT
Expires:-1
Location:http://localhost:49978/sites/1/menus/65/items/19
Pragma:no-cache

Однако заголовок Location отсутствует в объекте XmlHttpRequest , переданном в обратном вызове jQuery AJAX.

6
nl ja de
Да: Pragma, Cache-Control, Expires .
добавлено автор Ben Foster, источник
Попробуйте вывести результат getAllResponseHeaders() , чтобы узнать, что в нем находится?
добавлено автор dan richardson, источник
Я думаю, возможно, что вы не можете отправить заголовок местоположения, возможно, из-за характера работы xmlhttprequest. Возможно, он не сможет отслеживать заголовок местоположения, поэтому его можно игнорировать или даже не отправлять. Не уверен. Не могли бы вы просто задать новый заголовок, называемый New-Location , и прочитать это? Очевидно, что это не идеально.
добавлено автор dan richardson, источник

2 ответы

Проблема заключалась в том, что это запрос CORS и в соответствии с CORS Spec раскрыты только следующие «Простые столбцы ответов»:

  • Cache-Control
  • Content-Language
  • Content-Type
  • Истекает
  • Last-Modified
  • Pragma

Чтобы открыть дополнительные заголовки, вам необходимо включить их в Access-Control-Expose- Заголовок заголовка :

Access-Control-Expose-Headers: location

После этого изменения заголовок Location был доступен объекту XmlHttpRequest через getResponseHeader («Местоположение») .

Для обычных (не CORS) запросов это не проблема.

11
добавлено

Вы вручную добавляете заголовок местоположения или ожидаете, что он будет автоматически возвращен скриптом сервера? Как это не может быть установлено. Если вы не будете перенаправлять, я бы ожидал, что он не будет установлен, и Chrome действительно может просто добавить его сам, чтобы быть «полезным».

Возможно, просто попробуйте явно установить заголовок местоположения в вашем скрипте, тогда он определенно должен быть там, но это может иметь нежелательные побочные эффекты.

0
добавлено
Заголовок Location явно установлен API. Как бы Chrome знал, что задать заголовок, если он не был включен в ответ.
добавлено автор Ben Foster, источник
JavaScript Jobs — чат
JavaScript Jobs — чат
8 336 участник(ов)

JavaScript Jobs — чат для поиска работы и людей Правила оформления: https://teletype.in/@telegram-ru/r1WQe5F1m См. также: @mobile_jobs, @devops_jobs, @nodejs_jobs, @react_js, @angular_ru, @js_ru

JavaScript.ru
JavaScript.ru
7 932 участник(ов)

Сообщество сайта JavaScript.ru в Slack.

pro.js
pro.js
4 675 участник(ов)

Про JavaScript и NodeJS Invite: https://t.me/joinchat/Be4rsT5Rsgq30DHutjxXgA Правила: http://telegra.ph/ru-chat-rules-06-19 Вакансии только с ЗП, не чаще раза в неделю.

Верстка сайтов HTML/CSS/JS/PHP
Верстка сайтов HTML/CSS/JS/PHP
3 439 участник(ов)

Правила группы: напишите !rules в чате. Группа Вк: vk.com/web_structure Freelancer: @web_fl Веб Дизайн: @dev_design Маркетолог: @topmarkening Автор: @M_Boroda

JavaScript — русскоговорящее сообщество
JavaScript — русскоговорящее сообщество
3 269 участник(ов)

Рекомендуем сразу отключить уведомления Правила: https://rudevs.network/ByaMH6un7 См. также: @js_noobs_ru, @nodejs_ru, @typescript_ru, @react_js, @electron_ru Вакансии и поиск работы: @javascript_jobs

JavaScript Noobs — сообщество новичков
JavaScript Noobs — сообщество новичков
2 484 участник(ов)

Чат для новичков

javascript_ru
javascript_ru
915 участник(ов)

Сообщество любителей самого популярного языка программирования в мире. Чат основан в 2009 году. Логи: https://goo.gl/9EOeM7 Поддержка бота: @chat_linker (ссылка на репу внутри) Вам будут интересны @frontend_ru и @css_ru

jsChat
jsChat
603 участник(ов)

Чат посвященный программированию на языке javaScript Перед отправкой ссылки на Ваш контент посоветуйтесь с админом Все ссылки удаляются ботом автоматически

JavaScript for Zombies Chat
JavaScript for Zombies Chat
492 участник(ов)

Чат про JavaScript для настоящих zombie! Вход строго по приглашениям! Ссылка для строгих приглашений: https://t.me/joinchat/AAMBHz3Uyr0tuZ7VaB029g

All That JS
All That JS
417 участник(ов)

JS на русском