Асинхронный междоменный запрос POST через JavaScript?

Я мог бы просто создать форму и использовать ее для отправки запроса POST на любой сайт, дело в том, что метод FORM не является асинхронным, мне нужно знать, когда страница завершила загрузку. Я пробовал возиться с этим, используя iframe с формой внутри, но безуспешно.

Любые идеи?

РЕДАКТИРОВАТЬ

К сожалению, у меня нет контроля над данными ответа, они варьируются от XML, json до простого текста.

Почему ваши попытки iframe потерпели неудачу? У меня есть подозрение, что это должно сработать. Не могли бы вы подробно рассказать о своем подходе?

Ates Goral 22.01.2009 00:23

Если у вас нет контроля над данными ответа, это не будет угрозой безопасности, потому что страница, загруженная в iframe, может получить доступ к DOM вашей страницы с помощью window.parent.

andho 25.10.2010 12:26
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
8
2
10 900
5
Перейти к ответу Данный вопрос помечен как решенный

Ответы 5

Если данные, возвращаемые из междоменной публикации, представляют собой JSON, вы можете динамически добавить тег скрипта, указывающий на URI, который возвращает данные. Браузер загрузит этот «скрипт», к которому затем вы сможете получить доступ из другого javascript.

Я не контролирую данные ответа.

Luca Matteis 22.01.2009 00:14

Также тег скрипта - это только GET, для этого -1.

Luca Matteis 22.01.2009 00:15

Конечно, тип ответа не является произвольным. Они не отправят вам XML один раз, и тогда следующим запросом будет JSON. За тем, что определяет возвращаемые типы, должна быть какая-то логика.

Sampson 22.01.2009 00:16

Вы не можете делать ничего междоменного с помощью javascript. Вам придется использовать серверный язык, такой как PHP, asp или что-то в этом роде.

Ерунда. Вы можете добавить тег скрипта в DOM, и SRC этого скрипта может указывать куда угодно. Теги сценария не применяют одну и ту же политику домена.

Diodeus - James MacFarlane 22.01.2009 00:18

Нет, но OP заявляет, что ему нужно что-то сделать с данными, поскольку это может быть что угодно (простой текст, JSON, XML). Тег сценария не покрывает это за вас.

Pim Jager 22.01.2009 00:22

@Diodeus: Также я сказал, что он не может делать ничего междоменного, используя javascript, то, что вы описываете, является DOM.

Pim Jager 22.01.2009 00:24

@Diodeus: вы не можете POST тега сценария.

Jonathan Lonowski 22.01.2009 00:25

Да, я знаю это, я отвечал на утверждения этого ответа, а не на вопрос.

Diodeus - James MacFarlane 22.01.2009 00:28

@Diodeus: Ааа! Простите. ;) Обратил внимание на "что угодно" в ответе. Не подходящее слово, Пим. ;)

Jonathan Lonowski 22.01.2009 00:30

Это оправдание, что я не говорю по-английски? Боюсь, что это не так. По теме: я действительно думаю, что могу быть носителем языка, я действительно не вижу, что там с чем-то не так? У Javascript-движков есть SOP, поэтому междоменные вещи нельзя делать с помощью javascript?

Pim Jager 22.01.2009 00:36

@Pim. Ваше заявление о том, что вы "не можете использовать междоменный что-нибудь", неверно. Запросы GET (будь то XmlHttp или Script, Img srcs) приемлемы. Когда клиент пытается отправить данные POST на сервер, это становится проблемой.

AnthonyWJones 22.01.2009 00:44

Вы можете размещать сообщения где угодно. Просто установите атрибут действия элемента формы, и вы сможете публиковать сообщения на любом интересующем вас сайте. Однако полученные данные заменят загруженный документ. Если это iframe, родительский фрейм не сможет увидеть ответ из-за SOP.

Mr. Shiny and New 安宇 22.01.2009 00:52
Ответ принят как подходящий

Вы можете записать событие 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")
}

Да, это здорово: я знаю, что данные, которые я хочу использовать, уже загружены, отлично. Но вы все равно не можете его использовать.

Pim Jager 22.01.2009 00:25

Отлично, можешь показать пример? Мне не нужны данные, мне просто нужно знать, когда событие было запущено.

Luca Matteis 22.01.2009 00:27

Я не вижу нигде в вопросе, где требуются данные ответа.

Diodeus - James MacFarlane 22.01.2009 00:30

@Diodus, Хорошо, извините, я, должно быть, прочитал OP, в котором говорится, что (поскольку он это делает)), потому что в OP также есть что-то о типах контента.

Pim Jager 22.01.2009 00:32

Спасибо Diodeus, который отлично работает, за исключением одной мелочи. Событие onload срабатывает 2 раза, как только загружается iframe (даже до отправки формы) и когда вы отправляете iframe. Есть ли способ не сжечь первую загрузку?

Luca Matteis 22.01.2009 00:42

Хочу отметить, что этот метод работает только в Firefox :(

Luca Matteis 22.01.2009 18:53

Он также должен работать в браузерах webkit (я проверял в Google Chrome). Это похоже на метод, используемый в картах Google.

andho 25.10.2010 12:12

Вы также можете прочитать содержимое iframe и, возможно, при необходимости определить тип данных, но я не думаю, что можно прочитать заголовки ответов.

andho 25.10.2010 12:20

Это сработало только после того, как я удалил () после «возврата».

Stephen Saucier 29.01.2014 06:00

Объект IOYUI3 предлагает междоменные запросы, однако он делает это с помощью небольшого элемента управления Flash, который он встраивает на страницу.

Несмотря на то, что идет работа над безопасными междоменными запросами из JavaScript, в настоящее время вам необходимо использовать плагин, такой как Flash или Silverlight, в качестве моста, с помощью которого можно сделать запрос.

Вы игнорируете тот факт, что для этого запроса можно использовать метод iframe.

andho 25.10.2010 11:59

ЕСЛИ вы хотите делать междоменные запросы, вы должны либо выполнить вызов JSON, либо использовать прокси на стороне сервера. Серверный прокси-сервер легко настроить, и я не уверен, почему люди так его избегают. Настройте в нем правила, чтобы люди не могли использовать прокси для других запросов.

Другие вопросы по теме