Javascript 在没有ajax的情况下防止表单提交后重定向
我的html中有一个表单,它有一个指向不同域的动作url。提交后,它会重定向浏览器。我希望它被提交,但不重定向到另一个页面。我知道我可以用Ajax提交它,但由于域不同,它会给出CORS错误。我不能在我自己的php文件中镜像请求,因为表单提交是由虚拟信用卡支付系统进行的,它不允许您镜像它 那么,有没有什么方法可以在不使用ajax的情况下提交表单但防止重定向呢。正如我所知,使用ajax向不同的域发出请求是不可能的 新的 我想你可以用iFrame做点什么 因此,逻辑是:Javascript 在没有ajax的情况下防止表单提交后重定向,javascript,php,jquery,ajax,forms,Javascript,Php,Jquery,Ajax,Forms,我的html中有一个表单,它有一个指向不同域的动作url。提交后,它会重定向浏览器。我希望它被提交,但不重定向到另一个页面。我知道我可以用Ajax提交它,但由于域不同,它会给出CORS错误。我不能在我自己的php文件中镜像请求,因为表单提交是由虚拟信用卡支付系统进行的,它不允许您镜像它 那么,有没有什么方法可以在不使用ajax的情况下提交表单但防止重定向呢。正如我所知,使用ajax向不同的域发出请求是不可能的 新的 我想你可以用iFrame做点什么 因此,逻辑是: 有一个空的,带有显示:无 有
- 有一个空的
,带有显示:无代码>
- 有一个
- 提交并
preventDefault()
- 使用查询字符串构建URL
- 最好是一个完全不同的页面
newself.php?var1=something&var2=anotherthing
- 最好是一个完全不同的页面
- 使用URL+querystring将
附加到隐藏的$('div')。追加(');
- 从URL获取内容并构建副本表单
- 给
一些JS,以便在加载文档时自动将表单提交到API URLnewself.php
- 清除隐藏的
内容,等待新提交
- AJAX提交到您的PHP文件并执行
e.preventDefault()
- 使用PHP将变量发布到其他域
- 等待其他域的响应
- 向您的AJAX呼叫发送“是”或“不是”
- 有一个空的
和显示:无;
- 有一个
- 提交并
preventDefault()
- 使用查询字符串构建URL
- 最好是一个完全不同的页面
newself.php?var1=something&var2=anotherthing
- 最好是一个完全不同的页面
- 使用URL+querystring将
附加到隐藏的$('div')。追加(')代码>
- 从URL获取内容并构建副本表单
- 给
一些JS,以便在加载文档时自动将表单提交到API URLnewself.php
- 清除隐藏的
内容,等待新提交
- AJAX提交到您的PHP文件并执行
e.preventDefault()
- 使用PHP将变量发布到其他域李>
- 等待其他域的响应
- 向您的AJAX呼叫发送“是”或“不是”
- 解决方案1
AJAX可以跨域使用。您需要目标域在响应上设置适当的头
Access-Control-Allow-Origin: yourdomain.com
Access-Control-Allow-Methods: POST, OPTIONS
Access-Control-Allow-Headers: [anything else you might send]
从ajax调用返回false
或调用preventDefault()
以防止浏览器重定向页面
解决方案2
提交到您自己的服务器端代码并模拟事务。但是,您提到他们不允许您镜像它,我也没有解决此问题的详细信息。您可以向自己的服务器提交AJAX(无需CORS问题和标题)或普通POST
解决方案3
将其提交到他们的服务器,但让他们的服务器重定向回您自己站点上的页面。
通常有一种方法可以通过他们提供给您的任何API控制面板来设置它。
再一次,没有具体细节,我无法直接解决这个问题
解决方案4
在iframe中加载数据并在iframe中提交。这可能会有问题,具体取决于
X-Frame-Options
的值,或者它们是否具有某种CSRF令牌,但您应该能够在iframe中发布表单,而无需重定向主页。iframe也可以隐藏并通过JS提交(使用表单上的submit()
方法——不需要ajax)解决方案1
AJAX可以跨域使用。您需要目标域在响应上设置适当的头
Access-Control-Allow-Origin: yourdomain.com
Access-Control-Allow-Methods: POST, OPTIONS
Access-Control-Allow-Headers: [anything else you might send]
从ajax调用返回false
或调用preventDefault()
以防止浏览器重定向页面
解决方案2
提交到您自己的服务器端代码并模拟事务。但是,您提到他们不允许您镜像它,我也没有解决此问题的详细信息。您可以向自己的服务器提交AJAX(无需CORS问题和标题)或普通POST
解决方案3
将其提交到他们的服务器,但让他们的服务器重定向回您自己站点上的页面。
通常有一种方法可以通过他们提供给您的任何API控制面板来设置它。
再一次,没有具体细节,我无法直接解决这个问题
解决方案4
在iframe中加载数据并在iframe中提交。这可能会有问题,具体取决于
X-Frame-Options
的值,或者它们是否具有某种CSRF令牌,但您应该能够在iframe中发布表单,而无需重定向主页。iframe也可以隐藏并通过JS提交(使用表单上的submit()
方法——不需要ajax)如果主要目标是让访问者留在网站上并向第三方提交访问者输入