在不离开页面/网站的情况下提交外部表单

时间:2011-02-24 00:10:41

标签: php jquery ajax forms

我浏览了网站以获得答案,但没有任何关于我需要的信息(这很接近,除非它实际上没有提交表单:Prevent form redirect OR refresh on submit?)。

我正在尝试将邮件列表注册(从ReverbNation上托管的注册页面借来的代码)合并到网站上。

表单正确提交,但是签名被重定向到ReverbNation网站上一个隐藏呈现的页面。我无法修改他们的脚本,也不认为我可以用来保持整洁的API。

有没有办法在后台提交表单,而不会重定向用户?

3 个答案:

答案 0 :(得分:2)

如果您要发布到同一个域,则可以使用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,否则您的页面将被重定向。

答案 1 :(得分:2)

以下是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 :(得分:0)

据我了解,您需要发送一个没有重定向的表单吗?

考虑我的例子

$(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文档here

希望对你有帮助