在没有ajax的情况下提交后阻止表单重定向

时间:2013-12-09 20:53:14

标签: javascript php jquery ajax forms

我的html中有一个表单,其中包含一个不同域的操作URL。提交后,它会重定向浏览器。我希望它被提交但不会重定向到另一个页面。我知道我可以用Ajax提交它,但由于域名不同,它会给出CORS错误。我无法在我自己的php文件中镜像请求,因为表单提交是由虚拟信用卡支付系统提出的,它不允许您镜像它。

那么,有没有办法提交表单但是在不使用ajax的情况下阻止重定向。据我所知,用ajax向不同的域发出请求是不可能的。

3 个答案:

答案 0 :(得分:1)

我想你可以用iFrame做点什么。

所以逻辑是:

  • 使用<div>
  • 填空display:none;
  • 拥有<form action='self.php'>
  • 提交并preventDefault()
  • 使用查询字符串构建网址
    • 最好是完全不同的页面newself.php?var1=something&var2=anotherthing
  • 使用网址+查询字符串将<iframe>附加到隐藏的<div>
    • $('div').append('<iframe src="newself.php?var1=something&var2=anotherthing"><iframe>");
  • 从网址获取内容并构建副本表格
  • newself.php某些JS在文档加载时自动将表单提交到API URL
  • 清除其内容的隐​​藏<div>以等待新提交

原始

我要离开这里,因为有人在我编辑lol

的时候投了赞成票

要提交到其他域,他们必须打开他们的服务器才能接受跨域POST。

所以这里有你应该研究的逻辑:

  • AJAX提交到您的PHP文件并执行e.preventDefault()
  • 使用PHP cURL将POST变量发送到其他域。 SO cURL Questions
  • 等待来自其他域的回复
  • 将“yay”或“nay”发回给您的AJAX通话

答案 1 :(得分:0)

解决方案1 ​​

跨域可以使用AJAX。您需要目标域在响应上设置适当的标头。

Access-Control-Allow-Origin: yourdomain.com
Access-Control-Allow-Methods: POST, OPTIONS
Access-Control-Allow-Headers: [anything else you might send]
来自您的ajax电话的

return false或致电preventDefault()以阻止浏览器重定向网页。

解决方案2

提交到您自己的服务器端代码并​​模拟交易。但是,您提到他们不允许您镜像它,我没有解决此问题的详细信息。您可以向自己的服务器提交AJAX(无CORS问题,无需标头)或正常POST。

解决方案3 将其提交到他们的服务器,但让他们的服务器重定向回您自己网站上的页面。 通常有一种方法可以通过他们为您提供的任何API控制面板进行设置。 再一次,没有具体细节,我无法直接解决问题

解决方案4 在iframe中加载数据并在iframe中提交。这可能会出现问题,具体取决于X-Frame-Options的值,或者如果它们具有某种CSRF令牌,但您应该能够在iframe中发布表单而不重定向主页面。 iframe也可以隐藏并通过JS提交(在表单上使用submit()方法 - 不需要ajax)

答案 2 :(得分:0)

如果主要目标是让访问者保持在您的网站上并将访问者输入提交给第三方网站,您可以将表单提交给执行第三方网站cUrl的本地php脚本。

这样,数据会在“水下”发布,而不会向访问者显示所有帖子参数,您可以将访问者留在自己的网站上。

唯一的问题是,您的付款服务提供商可能会根据付款结果(成功/失败/无法访问)将您重定向到不同的网页。