Отправить внешнюю форму, не покидая страницу / сайт - PullRequest
2 голосов
/ 24 февраля 2011

Я просмотрел сайт, чтобы найти ответы на эти вопросы, но ничего не нашел по поводу того, что мне нужно (это близко, за исключением того, что он фактически не отправляет форму: Запретить перенаправление формы ИЛИ обновить при отправке? ).

Я пытаюсь включить регистрацию в списке рассылки (код заимствован со страницы регистрации, размещенной на ReverbNation) на веб-сайте.

Форма отправляется правильно, ноПолучатель перенаправлен на ужасно отображаемую страницу на сайте ReverbNation.Я не могу изменить их скрипт и не думаю, что есть API, который я могу использовать, чтобы поддерживать порядок.

Есть ли способ отправить форму в фоновом режиме, без перенаправления пользователя?

Ответы [ 3 ]

2 голосов
/ 24 февраля 2011

Вот пример в PHP для туннелирования POST.

//set POST variables
$url = 'http://domain.com/url-to-post-to';
$fields = array(
            // Add the fields you want to pass through
            // Remove stripslashes if get_magic_quotes_gpc() returns 0.
            'last_name'=>urlencode(stripslashes($_POST['last_name'])),
            'first_name'=>urlencode(stripslashes($_POST['first_name'])),
            'email'=>urlencode(stripslashes($_POST['email']))
        );

//url-ify the data for the POST
foreach($fields as $key=>$value) { $fields_string .= $key.'='.$value.'&'; }
rtrim($fields_string,'&');

//open connection
$ch = curl_init();

//set the url, number of POST vars, POST data
curl_setopt($ch,CURLOPT_URL,$url);
curl_setopt($ch,CURLOPT_POST,count($fields));

// returns the response as a string instead of printing it
curl_setopt($handle, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch,CURLOPT_POSTFIELDS,$fields_string);

//execute post
$result = curl_exec($ch);

//close connection
curl_close($ch);

echo $result;
2 голосов
/ 24 февраля 2011

Если вы публикуете в том же домене, вы можете использовать пост AJAX.Однако кажется, что вы пытаетесь выполнить POST для другого домена, поэтому одна и та же политика происхождения браузера не позволит вам сделать это (http://en.wikipedia.org/wiki/Same_origin_policy). (JSONP может обойти это, но это не работает для POST)

Другой способ обойти это - заставить ваш сервер выполнять POST и туннелировать ответ обратно на вашу страницу.

<form id='yourForm' action="" onsubmit="javascript: doPostToTunnelPage(); return false;">
    <!-- inputs...-->
</form>

Убедитесь, что вы вернули false, иначе ваша страница будет перенаправлена.

0 голосов
/ 24 февраля 2011

Насколько я понимаю, вам нужно отправить форму без перенаправления?

рассмотрите мой пример

$(function() {
    $('#myForm').submit(function (e) {
        e.preventDefault();

        $.ajax({ /* params to send the form */ });

        return false;
    });
});

IIT это будет работать только из-за e.preventDefault.

If this method is called, the default action of the event will not be triggered. 

См. Документацию jQuery здесь для получения дополнительной информации.

Надеюсь, это поможет вам

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...