2014-10-19 2 views
0

У меня есть установка для входа на один из моих сайтов, где пользователь вводит свою информацию во всплывающее окно входа на домашней странице, которое затем отправляет информацию на сервлет, а затем получает ответ через JSON. Затем домашняя страница отправляет пользователя на страницу своего профиля или, напротив, отображает ошибку (например, если имя пользователя и пароль не совпадают).Междоменный AJAX POST withCredentials и совместимость с IE8 +

$.ajax({ 
    dataType: 'jsonp', 
    async: false, 
    url: loginLocation, 
    type: 'GET', 
    crossDomain: true, 
    cache: false, 
    xhrFields: crossDomain ? { 
     withCredentials: true 
    } : {}, 
    data: ({'key1': value1, 'key2': value2, ..., 'keyN':'valueN'}), 
    success: function(data){ 
     if (data && data.status && data.status == "success") { 
      window.location = profileLocation; 
     } else { 
      errorHandler(); 
     } 
    }, 
    error: errorHandler 
}); 

Я ищу, чтобы изменить это от запроса GET на POST для того, чтобы предотвратить произвольные строки запроса отправляется в сервлет. Однако, похоже, что здесь есть несколько соображений относительно того, как должно быть изложено решение. Он должен:

  • использовать POST вместо GET
  • быть запрос междоменное (страница Логин и сервлета на разных доменах над обоими из которых у меня есть доступ/управление)
  • использовать withCredentials параметр (функциональность Логина полагается на кук JSESSIONID так необходим этот параметр)
  • быть совместим с IE8 и выше

Я попытался глядя в запросы Ajax междоменных, которые соответствуют выше кру iteria, но основным моментом является совместимость с IE8/IE9. Подходы, такие как easyXDM, кажутся неоднозначными в отношении поддержки этих браузеров (я видел противоречивые отчеты в Интернете о том, как это работает в IE8), и я не хочу сталкиваться с опасностью осознания того, что он не будет работать на полпути через реализацию ,

Итак, можно ли сделать кросс-доменные запросы ajax с использованием POST и с параметром withCredentials, который также совместим с IE8 +? Является ли easyXDM подходящим решением для этого?

ответ

0

Мне удалось определить решение вышеуказанного вопроса, используя библиотеку xdomain (найденную в https://github.com/jpillora/xdomain), которая переопределяет поведение запроса, чтобы разрешить междоменный ajax в IE8 и IE9. Это включало настройку proxy.html, как показано в примере на сайте xdomain, а также добавление Access-Control-Allow-Origin и других связанных заголовков в ответ сервера. Это позволяет использовать междоменные ajax запросы JSON POST, используя withCredentials в IE8 + по критериям, перечисленным в исходном сообщении. Он также позволяет междоменные запросы между HTTP и HTTPS.