Асинхронный междоменный POST-запрос через JavaScript?
-
19-08-2019 - |
Вопрос
Я мог бы просто создать форму и использовать ее для выполнения запроса POST на любой сайт, дело в том, что метод FORM не является асинхронным, мне нужно знать, когда страница завершит загрузку.Я пытался повозиться с этим, используя iframe с формой внутри, но безуспешно.
Есть какие-нибудь идеи?
Редактировать
к сожалению, я не могу контролировать данные ответа, они варьируются от XML, json до простого текста.
Решение
Вы можете запечатлеть onload
событие, связанное с iframe
.Нацеливайтесь на свой form
перейдите в iframe и прослушайте загрузку.Однако вы не сможете получить доступ к содержимому iframe, только к событию.
Попробуйте что-то вроде этого:
<iframe id='RS' name='RS' src='about:blank' onload='loaded()'></iframe>
<form action='wherever.php' target='RS' method='POST'>...</form>
блок сценариев:
var loadComplete = 0
function loaded() {
//avoid first onload
if(loadComplete==0) {
loadComplete=1
return()
}
alert("form has loaded")
}
Другие советы
ЕСЛИ вы хотите выполнять междоменные запросы, вам следует либо выполнить вызов JSON, либо использовать серверный прокси.Серверный прокси-сервер прост в настройке, не знаю, почему люди так сильно его избегают.Настройте в нем правила, чтобы люди не могли использовать прокси-сервер для запросов других вещей.
Если данные, возвращаемые из междоменной записи, являются JSON, то вы можете динамически добавлять тег script, указывающий на URI, который возвращает данные.Браузер загрузит этот "скрипт", к которому затем вы сможете получить доступ из другого javascript.
YUI3's IO object предлагает междоменные запросы, однако делает это с помощью небольшого элемента управления Flash, который он встраивает на страницу.
Пока ведется работа над безопасными междоменными запросами с помощью JavaScript, на данный момент вам необходимо использовать плагин, такой как Flash или Silverlight, в качестве связующего звена для отправки запроса.
Вы не можете делать что-либо междоменное, используя javascript.Вам пришлось бы использовать серверный язык, такой как PHP, asp или что-то в этом роде.