Я мог бы просто создать форму и использовать ее для отправки запроса POST на любой сайт, дело в том, что метод FORM не является асинхронным, мне нужно знать, когда страница завершила загрузку. Я пробовал возиться с этим, используя iframe с формой внутри, но безуспешно.
Любые идеи?
РЕДАКТИРОВАТЬ
К сожалению, у меня нет контроля над данными ответа, они варьируются от XML, json до простого текста.
Если у вас нет контроля над данными ответа, это не будет угрозой безопасности, потому что страница, загруженная в iframe, может получить доступ к DOM вашей страницы с помощью window.parent.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Если данные, возвращаемые из междоменной публикации, представляют собой JSON, вы можете динамически добавить тег скрипта, указывающий на URI, который возвращает данные. Браузер загрузит этот «скрипт», к которому затем вы сможете получить доступ из другого javascript.
Я не контролирую данные ответа.
Также тег скрипта - это только GET, для этого -1.
Конечно, тип ответа не является произвольным. Они не отправят вам XML один раз, и тогда следующим запросом будет JSON. За тем, что определяет возвращаемые типы, должна быть какая-то логика.
Вы не можете делать ничего междоменного с помощью javascript. Вам придется использовать серверный язык, такой как PHP, asp или что-то в этом роде.
Ерунда. Вы можете добавить тег скрипта в DOM, и SRC этого скрипта может указывать куда угодно. Теги сценария не применяют одну и ту же политику домена.
Нет, но OP заявляет, что ему нужно что-то сделать с данными, поскольку это может быть что угодно (простой текст, JSON, XML). Тег сценария не покрывает это за вас.
@Diodeus: Также я сказал, что он не может делать ничего междоменного, используя javascript, то, что вы описываете, является DOM.
@Diodeus: вы не можете POST тега сценария.
Да, я знаю это, я отвечал на утверждения этого ответа, а не на вопрос.
@Diodeus: Ааа! Простите. ;) Обратил внимание на "что угодно" в ответе. Не подходящее слово, Пим. ;)
Это оправдание, что я не говорю по-английски? Боюсь, что это не так. По теме: я действительно думаю, что могу быть носителем языка, я действительно не вижу, что там с чем-то не так? У Javascript-движков есть SOP, поэтому междоменные вещи нельзя делать с помощью javascript?
@Pim. Ваше заявление о том, что вы "не можете использовать междоменный что-нибудь", неверно. Запросы GET (будь то XmlHttp или Script, Img srcs) приемлемы. Когда клиент пытается отправить данные POST на сервер, это становится проблемой.
Вы можете размещать сообщения где угодно. Просто установите атрибут действия элемента формы, и вы сможете публиковать сообщения на любом интересующем вас сайте. Однако полученные данные заменят загруженный документ. Если это iframe, родительский фрейм не сможет увидеть ответ из-за SOP.
Вы можете записать событие 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")
}
Да, это здорово: я знаю, что данные, которые я хочу использовать, уже загружены, отлично. Но вы все равно не можете его использовать.
Отлично, можешь показать пример? Мне не нужны данные, мне просто нужно знать, когда событие было запущено.
Я не вижу нигде в вопросе, где требуются данные ответа.
@Diodus, Хорошо, извините, я, должно быть, прочитал OP, в котором говорится, что (поскольку он это делает)), потому что в OP также есть что-то о типах контента.
Спасибо Diodeus, который отлично работает, за исключением одной мелочи. Событие onload срабатывает 2 раза, как только загружается iframe (даже до отправки формы) и когда вы отправляете iframe. Есть ли способ не сжечь первую загрузку?
Хочу отметить, что этот метод работает только в Firefox :(
Он также должен работать в браузерах webkit (я проверял в Google Chrome). Это похоже на метод, используемый в картах Google.
Вы также можете прочитать содержимое iframe и, возможно, при необходимости определить тип данных, но я не думаю, что можно прочитать заголовки ответов.
Это сработало только после того, как я удалил () после «возврата».
Объект IOYUI3 предлагает междоменные запросы, однако он делает это с помощью небольшого элемента управления Flash, который он встраивает на страницу.
Несмотря на то, что идет работа над безопасными междоменными запросами из JavaScript, в настоящее время вам необходимо использовать плагин, такой как Flash или Silverlight, в качестве моста, с помощью которого можно сделать запрос.
Вы игнорируете тот факт, что для этого запроса можно использовать метод iframe.
ЕСЛИ вы хотите делать междоменные запросы, вы должны либо выполнить вызов JSON, либо использовать прокси на стороне сервера. Серверный прокси-сервер легко настроить, и я не уверен, почему люди так его избегают. Настройте в нем правила, чтобы люди не могли использовать прокси для других запросов.
Почему ваши попытки iframe потерпели неудачу? У меня есть подозрение, что это должно сработать. Не могли бы вы подробно рассказать о своем подходе?