Отправка сообщения POST с проблемой AJAX - PullRequest
0 голосов
/ 17 июня 2011

В настоящее время я пытаюсь отправить сообщение POST, которое работает нормально, за исключением ошибки об отсутствии правильных учетных данных.Однако после добавления заголовка учетных данных тип сообщения изменяется на OPTIONS и завершается ошибкой.Я не понимаю, как добавление заголовка вызывает изменение типа на OPTIONS.Любая помощь будет оценена.

    ajaxRequest = $j.ajax({
                       url: url,
                       type: 'POST',
                      beforeSend : function(req) {
                           req.setRequestHeader('Authorization', auth),
                      }
                       success: function(data, status) {
                           console.log("Success!!");
                           console.log(data);
                           console.log(status);
                           },
                       error: function(xhr, desc, err) {
                           console.log(xhr);
                           alert('fail')
                          console.log("Desc: " + desc + "\nErr:" + err);
                           }

                    });

РЕДАКТИРОВАТЬ: просто чтобы быть более ясным, я могу буквально зайти и закомментировать функцию setRequestHeader, и он отправляет сообщение POST.

Ответы [ 3 ]

3 голосов
/ 27 июня 2011

Проблема, с которой вы сталкиваетесь, связана с междоменными ограничениями при использовании AJAX.Когда вы пытаетесь установить заголовок авторизации, браузер выдает так называемый запрос перед полетом, чтобы увидеть, будет ли сервер принимать запросы из этого домена.

Запрос перед полетом обычно отправляется как запрос OPTIONS,Если вызываемый сервер не возвращает заголовок Access-Control-Allow-Origin, соответствующий вашему домену, запрос AJAX блокируется.Подробнее об этом можно узнать здесь: Обмен ресурсами между источниками

" Пользовательские агенты могут определить с помощью предварительного запроса, готов ли ресурс общего происхождения к приему запросов, используя не-простой метод, из данного источника."

Я столкнулся с той же проблемой - есть несколько возможных обходных путей в зависимости от вашего сценария.Если у вас есть какой-либо способ установить вышеупомянутый заголовок на стороннем сервере (некоторые приложения / службы предлагают это), то это, вероятно, самый простой способ.

Существует также библиотека javascript под названием EasyXDM это может работать для вас, но, опять же, оно будет полезно только в том случае, если у вас есть доступ к стороннему серверу для загрузки файла конфигурации для этой библиотеки.

Другими вариантами исследования являются PostMessage и междоменное взаимодействие Iframe.,Последний - скорее взлом старой школы, первый - рекомендуемый подход для новых браузеров.Это не будет работать для IE6 / 7.

Опция, которую мы, вероятно, в конечном итоге будем использовать, - это простой прокси-вызов нашего собственного сервера с помощью запроса AJAX, а на сервере вызов стороннего сервера.Это полностью исключает междоменную проблему и имеет другие преимущества для нашего сценария.

0 голосов
/ 17 июня 2011

Ответ OPTIONS происходит, когда сервер не знает, как ответить на запрос ajax.

Я видел, как это часто случается при попытке разместить на стороннем домене (то есть, на нескольких сайтах)

Метод OPTIONS представляет запрос на информацию об опциях связи, доступных в цепочке запрос / ответ, идентифицируемой Request-URI. Этот метод позволяет клиенту определять параметры и / или требования, связанные с ресурсом, или возможности сервера, не предполагая действия ресурса или не инициируя извлечение ресурса.

Вы пробовали:

  • Имеете какой-то обратный вызов для URL, на который выкладывается сообщение?
  • Явно установка заголовков (я предполагаю, что вы используете PHP) на URL, который публикуется?
0 голосов
/ 17 июня 2011

Я полагаю, это проблема в Internet Explorer.без явного указания метода запроса (POST | GET) заголовок запроса не содержит настраиваемый заголовок в IE, но работает в других браузерах.

Все же попробуйте опубликовать это в багах для jquery.Также попробуйте в других браузерах.

Редактировать 1: Я видел это как ошибку в jQuery 1.4.x .... Я сообщил об ошибке сейчас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...