xhrPost от Dojo и Firefox

#javascript #json #post #dojo #http-post

#javascript #json #Публикация #dojo #http-post

Вопрос:

У меня есть скрипт входа, который отправляет имя пользователя / пароль в формате json на сервер. Он использует POST, поэтому на стороне клиента это делается с помощью xhrPost. Проблема в том, что когда я пытаюсь войти в систему с помощью Firefox, браузер не отправляет запрос POST, но вместо этого запрашивает ПАРАМЕТРЫ и фактически не отправляет никаких параметров. Код отлично публикуется в Chrome и Safari, так что с Firefox определенно что-то происходит. Сервер входа находится на другом IP: порту, поэтому это междоменный запрос, я не знаю, имеет ли это значение.

Вот код:

 dojo.xhrPost({
    url: settings().get('login_server'),
    postData: dojo.toJson({username:user,password:pass}),
    handleAs: 'json',
    headers: { "Content-Type": "application/json", "Accept": "application/json"},
    load: function(data,status) { ... },
    error: function(error,status) { ... }
})
  

Комментарии:

1. Есть причина, по которой вход в систему обычно не выполняется с помощью ajax. Это может быть небезопасно.

2. Спасибо за комментарий, но это действительно не помогает…

3. Это было просто замечание на стороне. Я не совсем уверен, почему это происходит. Можете ли вы выполнять отладку в dojo? Какую версию dojo вы используете?

4. Странно. Тот же код отлично работает и здесь. Что именно ваш settings().get('login_server') возвращает?

5. settings().get(‘login_server’) возвращает http://192.168.1.101:81 . Я использую Dojo 1.6.1 — только вчера обновил инструментарий, чтобы убедиться, что это не ошибка в старой версии.

Ответ №1:

Вы не можете надежно использовать XMLHttpRequest в разных браузерах для публикации междоменной публикации, если сервер не поддерживает контроль доступа HTTP. Вот почему Dojo выполняет запрос ПАРАМЕТРОВ, чтобы проверить заголовок Access-Control-Allow-Origin.

Вы можете использовать dojo.io.iframe для отправки в другой домен, но проверка успешного завершения невозможна, если конечная точка входа не возвращает страницу специального формата (в основном содержащую JSON внутри текстовой области).

Браузеры, которые поддерживают XMLHttpRequest 2-го уровня, могут отправлять междоменные запросы. Вот почему он работает в Chrome / Safari и т.д.