Webix AJAX с CORS работает везде, кроме IE

Вчера утром перестали работать вызовы AJAX из созданного мной виджета webix в IE (проверены IE10 и 11). Он работал с IE до вчерашнего утра.

Я восстановил php-файлы, которые я изменил вчера утром, из резервной копии, но все еще не могу совершать AJAX-вызовы с помощью IE. Я создал фрагмент Webix, чтобы проиллюстрировать мою проблему ( http://webix.com/snippet/2047ef57).

Если вы нажмете кнопку в фрагменте / примере в любом месте, кроме IE, вы получите список хирургов коленного сустава из клиники ортопедической хирургии. Если вы попытаетесь запустить тот же код в IE, вы получите сообщение "Ошибка сценария".

Я пробовал и GET, и POST сделать этот запрос, чтобы избежать проблем с кэшированием IE, о которых я читал в Интернете.

Кто-нибудь есть какие-либо предложения о том, что я могу попытаться заставить мой PHP снова работать в IE?

2 ответа

Решение

Библиотека webix работает в браузере и использует ActiveX вместо XMLHttpRequest для IE:

getXHR: function () {
    return webix.env.isIE
        ? new ActiveXObject("Microsoft.xmlHTTP")
        : new XMLHttpRequest;
}

Если вы переключите строку user-agent браузера и, таким образом, прекратите это обнаружение браузера, вы заметите, что междоменный запрос проходит без проблем.

Вы можете подтвердить это, выполнив следующие действия:

  1. Нажмите F12, чтобы открыть Инструменты разработчика
  2. Переключиться на вкладку Эмуляция (Ctrl+8)
  3. Установите для параметра User Agent String значение "Google Chrome"

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

Этот тест, который выполняет webix, должен сначала проверить поддержку XMLHttpRequest и использовать его, если он присутствует. Подход к тестированию браузера, а не функции, не рекомендуется (очевидно по вашей проблеме):

Попробуйте добавить следующее, чтобы переопределить эту логику с помощью нашего собственного теста:

webix.ajax.prototype.getXHR = function () {
    return XMLHttpRequest
        ? new XMLHttpRequest
        : new ActiveXObject("Microsoft.xmlHTTP");
}

Тест онлайн: http://webix.com/snippet/5e654155

Есть две вещи, которые вы можете сделать, основываясь на документации Webix для сценария CORS. Или вы:

  1. Настройте сервер, на котором размещены ваши PHP-файлы, чтобы он позволял любому клиенту из другого домена получать данные с него.

    http://docs.webix.com/desktop__crossdomain_loading.html

Или же

  1. Измените код на стороне клиента и используйте технику JSONP с методом webix.jsonp() - фрагмент кода можно найти по ссылке, приведенной выше.

Первый вариант идеален, если у вас есть доступ к конфигурации веб-сервера, чтобы ответить определенным заголовком "Access-Control-Allow-Origin" для запросов http. Но если у вас нет такого большого контроля, то второй пункт - ваш выбор

Другие вопросы по тегам