Если вы просто хотите выполнить POST формы на своем собственном сайте, используя $.ajax()
(например, для имитации опыта AJAX), вы можете использовать Плагин jQuery Form. Однако, если вам нужно выполнить POST формы в другом домене или в своем собственном домене, но с использованием другого протокола (незащищенная http:
публикация страницы на защищенную https:
страницу), тогда вы столкнетесь с междоменным скриптингом. ограничения, которые вы не сможете устранить с помощью одного лишь jQuery (подробнее). В таких случаях вам нужно использовать главное оружие: YQL. Проще говоря, YQL - это язык веб-парсинга с синтаксисом, подобным SQL, который позволяет запрашивать весь Интернет как одну большую таблицу. В нынешнем виде, по моему скромному мнению, YQL - единственный [простой] путь, если вы хотите выполнять междоменные POST-сообщения с использованием клиентского JavaScript.
В частности, вам необходимо использовать таблицу открытых данных YQL. содержащий блок Execute, чтобы это произошло. Подробное описание того, как это сделать, можно найти в статье "Очистка документов HTML, требующих данных POST, с помощью YQL". К счастью для нас, гуру YQL Кристиан Хейльманн уже создал таблицу открытых данных. который обрабатывает данные POST. Вы можете поиграть с таблицей "htmlpost" Кристиана в YQL Console. Вот разбивка синтаксиса YQL:
select *
- выбрать все столбцы, аналогично SQL, но в этом случае столбцы являются элементами XML или объектами JSON, возвращаемыми запросом. В контексте очистки веб-страниц эти «столбцы» обычно соответствуют элементам HTML, поэтому, если вы хотите получить только заголовок страницы, вы должны использовать select head.title
.
from htmlpost
- какую таблицу запрашивать; в этом случае используйте таблицу открытых данных «htmlpost» (вы можете использовать свою собственную таблицу, если она вам не подходит).
url="..."
- action
URI формы.
postdata="..."
- сериализованные данные формы.
xpath="..."
- XPath узлов, которые вы хотите включить в ответ. Это действует как механизм фильтрации, поэтому, если вы хотите включить только теги <p>
, вы должны использовать xpath="//p"
; чтобы включить все, что вы бы использовали xpath="//*"
.
Нажмите «Тест», чтобы выполнить YQL-запрос. Если вы довольны результатами, обязательно (1) нажмите «JSON», чтобы установить формат ответа JSON, и (2) снимите флажок «Диагностика», чтобы минимизировать размер полезной нагрузки JSON путем удаления посторонней диагностической информации. Самый важный бит - это URL-адрес внизу страницы - это URL-адрес, который вы бы использовали в выражении $.ajax()
.
Здесь я собираюсь показать вам точные шаги для выполнения междоменной формы POST через запрос YQL, используя этот образец формы:
<form id="form-post" action="https://www.example.com/add/member" method="post">
<input type="text" name="firstname">
<input type="text" name="lastname">
<button type="button" onclick="doSubmit()">Add Member</button>
</form>
Ваш JavaScript будет выглядеть так:
function doSubmit() {
$.ajax({
url: '//query.yahooapis.com/v1/public/yql?q=select%20*%20from%20htmlpost%20where%0Aurl%3D%22' +
encodeURIComponent($('#form-post').attr('action')) + '%22%20%0Aand%20postdata%3D%22' +
encodeURIComponent($('#form-post').serialize()) +
'%22%20and%20xpath%3D%22%2F%2F*%22&format=json&env=store%3A%2F%2Fdatatables.org%2Falltableswithkeys&callback=',
dataType: 'json', /* Optional - jQuery autodetects this by default */
success: function(response) {
console.log(response);
}
});
}
Строка url
- это URL-адрес запроса, скопированный из консоли YQL, за исключением закодированного action
URI формы и динамически вставленных сериализованных входных данных.
ПРИМЕЧАНИЕ. Помните о последствиях для безопасности при передаче конфиденциальной информации через Интернет. Убедитесь, что страница, с которой вы отправляете конфиденциальную информацию, безопасна (https:
) и с использованием TLS 1.x вместо SSL 3.0.
person
thdoan
schedule
20.04.2015