Сообщение ajax post запрещено в IE9 [дубликат]

ECMAScript 6 имеет «генераторы», которые позволяют вам легко программировать в асинхронном стиле.

function* myGenerator() {
    const callback = yield;
    let [response] = yield $.ajax("https://stackoverflow.com", {complete: callback});
    console.log("response is:", response);

    // examples of other things you can do
    yield setTimeout(callback, 1000);
    console.log("it delayed for 1000ms");
    while (response.statusText === "error") {
        [response] = yield* anotherGenerator();
    }
}

Для запуска вышеуказанного кода вы делаете это:

const gen = myGenerator(); // Create generator
gen.next(); // Start it
gen.next((...args) => gen.next([...args])); // Set its callback function

Если вам нужно настроить таргетинг на браузеры, которые не поддерживают ES6, вы можете запустить код через Babel или short-compiler для генерации ECMAScript 5.

Обратный вызов ...args завернут в массив и разрушен, когда вы их читаете так что шаблон может справиться с обратными вызовами, которые имеют несколько аргументов. Например, с узлом fs :

const [err, data] = yield fs.readFile(filePath, "utf-8", callback);

46
задан Jk1 13 July 2014 в 09:43
поделиться

3 ответа

Решение, которое мне удалось достичь с помощью опытного ng-dev в группе Google AngularJS, это библиотека xDomain .

Настройка очень просто, просто поместите файл proxy.html в корень вашего API, с регулярным выражением / строкой для разрешенного источника («мастер») и ссылкой на скрипт во внешнем интерфейсе, а затем укажите этот файл из вашего интерфейса скрипт ('master').

Он работает, открывая файл proxy.html в iframe и общающийся с ресурсом CORS с помощью postMessage.

Работает как шарм с как $ http и $ resource.

Вы также можете поддерживать нормальное функционирование для обычных браузеров, поставив скрипт выше всех библиотек JavaScript:

<!--[if lte IE 9]>
<script src="xdomain.js" slave="http://example.org/proxy.html"></script>
<![endif]-->
74
ответ дан Blaise 28 August 2018 в 07:11
поделиться

В моем случае Response Headers содержит

Content-Type:application/json; charset=UTF-8

, и это проблема для IE9, поскольку он не может правильно обрабатывать / анализировать объекты JSON в ответах.

Переключение Response Headers в

Content-Type:text/plain; charset=UTF-8

Кроме того, убедитесь, что для IE9 включен следующий модуль: https: // stackoverflow. com / a / 28905072/1202371

разрешено получать ответ в тексте, а затем преобразовывать его в объект JSON.

-1
ответ дан Community 28 August 2018 в 07:11
поделиться

Конечно, ваша проблема связана с CORS. IE10 использует настоящий XmlHttpRequest, но до этого IE этого не делал. Безусловно, самый простой способ решить эти проблемы - использовать apache или nginx для прокси API. Например, с nginx, на вашем сервере {} block:

location /api {
   proxy_pass http://my.server.name:12345/v1;
   proxy_redirect off;
}

Обратите внимание, что даже jQuery не поддерживает XDomainRequest и CORS прямо, вам нужно добавить плагин для получения XDR. Также обратите внимание: XDR имеет некоторые серьезные ограничения в отношении CORS.

4
ответ дан yprez 28 August 2018 в 07:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: