#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 и т.д.