Если вы управляете удаленным сервером, вам, вероятно, следует использовать CORS, как описано в этом ответе ; он поддерживается в IE8 и более поздних версиях, а также во всех последних версиях FF, GC и Safari. (Но в IE8 и 9 CORS не позволит вам отправлять куки в запросе.)
Итак, если вы не управляете удаленным сервером, или если вам нужно поддерживать IE7, или если вам нужны файлы cookie, и вы должны поддерживать IE8 / 9, вы, вероятно, захотите использовать техника iframe.
- Создать фрейм с уникальным именем. (iframes используют глобальное пространство имен для всего браузера, поэтому выберите имя, которое не будет использовать ни один другой сайт.)
- Создайте форму со скрытыми входами, нацеливаясь на iframe.
- Отправьте форму.
Вот пример кода; Я тестировал его на IE6, IE7, IE8, IE9, FF4, GC11, S5.
function crossDomainPost() {
// Add the iframe with a unique name
var iframe = document.createElement("iframe");
var uniqueString = "CHANGE_THIS_TO_SOME_UNIQUE_STRING";
document.body.appendChild(iframe);
iframe.style.display = "none";
iframe.contentWindow.name = uniqueString;
// construct a form with hidden inputs, targeting the iframe
var form = document.createElement("form");
form.target = uniqueString;
form.action = "http://INSERT_YOUR_URL_HERE";
form.method = "POST";
// repeat for each parameter
var input = document.createElement("input");
input.type = "hidden";
input.name = "INSERT_YOUR_PARAMETER_NAME_HERE";
input.value = "INSERT_YOUR_PARAMETER_VALUE_HERE";
form.appendChild(input);
document.body.appendChild(form);
form.submit();
}
Осторожно! Вы не сможете напрямую прочитать ответ POST, поскольку iframe существует в отдельном домене. Кадры не могут общаться друг с другом из разных доменов; это политика того же происхождения .
Если вы управляете удаленным сервером, но не можете использовать CORS (например, потому что вы используете IE8 / IE9 и вам нужно использовать куки), есть способы обойти политику одного источника, например, с помощью window.postMessage
и / или одна из нескольких библиотек, позволяющих отправлять междоменные кросс-фреймовые сообщения в старых браузерах:
Если вы не управляете удаленным сервером, вы не можете прочитать ответ POST, точка. В противном случае это вызовет проблемы с безопасностью.