我浏览了网站以获得答案,但没有任何关于我需要的信息(这很接近,除非它实际上没有提交表单:Prevent form redirect OR refresh on submit?)。
我正在尝试将邮件列表注册(从ReverbNation上托管的注册页面借来的代码)合并到网站上。
表单正确提交,但是签名被重定向到ReverbNation网站上一个隐藏呈现的页面。我无法修改他们的脚本,也不认为我可以用来保持整洁的API。
有没有办法在后台提交表单,而不会重定向用户?
答案 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。
希望对你有帮助