我们有一个网站用户可以在我们的网站上填写的表单。表单提交给另一个站点并由另一个站点处理。但是,当用户提交表单时,我想在我们自己的网站上显示一个简单的确认页面。
不幸的是,我无法访问远程站点的代码,也无法指定本地确认页面。
这是流程的样子:
1)用户填写我们网站上的表格并点击提交。
2)表格信息被发送到远程站点
3)我们的网站上向用户显示一个简单的“谢谢”页面。它不需要显示或确认任何提交的数据。
我想过创建并提交一个只需将查询字符串传递给远程站点的php脚本,然后显示我们当地的“谢谢”页面。我怀疑这可能很简单,但我是一个php新手,不知道该怎么做。
有人知道这是否可行?代码是什么才能完成这样的事情?还是有更好的方式让我错过了?
我完全陷入困境,感谢您提供的任何帮助。
答案 0 :(得分:0)
由于您无法控制远程站点,也无法控制其输出。这表示在提交from之后您无法选择重定向请求的位置,因此将表单重定向到远程站点将不是解决方案。 (除非远程站点有回调机制,您可以设置在提交表单后重定向到哪个URL,例如paypal)
因此,您可以使用AJAX(what is ajax)将数据发送到远程站点,而无需将用户重定向到任何地方,并且一旦提交了AJAX请求,您就可以查看感谢信息给用户。但是,您无法知道远程站点是否已成功收到表单(除非他们输出某个文本或消息!)
所以一种方法是使用AJAX,这是一个带有JQuery的AJAX示例。
//Using JSONP if the remote site supports it
$.ajax({
dataType: 'jsonp',
data: 'id=10',
jsonp: 'jsonp_callback',//false?
url: 'http://www.google.com'
}).always(function () {alert("Thank you ... ");} );
如果远程域支持JSONP,您可以直接向其发送请求,但它仅限于GET请求。
如果您现在从浏览器控制台运行该代码,您将收到消息。但这并不能保证远程站点已收到它,这就是消息在always
功能中,而不是done
或success
的原因,因为它将返回整个远程站点页面。
请注意,将ajax请求发送到不同于发件人的网站是一个安全问题,因此您可以尝试使用不同的方法,如this,这意味着将数据发送到您的网站,然后使用一些php提取数据并将其传递给远程站点。
答案 1 :(得分:0)
我认为你必须使用Curl,参见我的示例
<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://www.w3schools.com/PHP/welcome.php' );
curl_setopt($ch, CURLOPT_POST, TRUE);//Instruct cURL to do a regular HTTP POST
//Specify the data which is to be posted
$post_data['name'] = 'xyz';
$post_data['email'] = 'value';
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);// Tell curl_exec to return the response output as a string
// Execute the cURL session
$response = curl_exec($ch );
// Close cURL session and file
curl_close($ch );
echo $response;
?>