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 браузера и, таким образом, прекратите это обнаружение браузера, вы заметите, что междоменный запрос проходит без проблем.
Вы можете подтвердить это, выполнив следующие действия:
- Нажмите F12, чтобы открыть Инструменты разработчика
- Переключиться на вкладку Эмуляция (Ctrl+8)
- Установите для параметра 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. Или вы:
Настройте сервер, на котором размещены ваши PHP-файлы, чтобы он позволял любому клиенту из другого домена получать данные с него.
Или же
- Измените код на стороне клиента и используйте технику JSONP с методом webix.jsonp() - фрагмент кода можно найти по ссылке, приведенной выше.
Первый вариант идеален, если у вас есть доступ к конфигурации веб-сервера, чтобы ответить определенным заголовком "Access-Control-Allow-Origin" для запросов http. Но если у вас нет такого большого контроля, то второй пункт - ваш выбор