Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/396.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在没有ajax的情况下防止表单提交后重定向_Javascript_Php_Jquery_Ajax_Forms - Fatal编程技术网

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

Javascript 在没有ajax的情况下防止表单提交后重定向,javascript,php,jquery,ajax,forms,Javascript,Php,Jquery,Ajax,Forms,我的html中有一个表单,它有一个指向不同域的动作url。提交后,它会重定向浏览器。我希望它被提交,但不重定向到另一个页面。我知道我可以用Ajax提交它,但由于域不同,它会给出CORS错误。我不能在我自己的php文件中镜像请求,因为表单提交是由虚拟信用卡支付系统进行的,它不允许您镜像它 那么,有没有什么方法可以在不使用ajax的情况下提交表单但防止重定向呢。正如我所知,使用ajax向不同的域发出请求是不可能的 新的 我想你可以用iFrame做点什么 因此,逻辑是: 有一个空的,带有显示:无 有

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

那么,有没有什么方法可以在不使用ajax的情况下提交表单但防止重定向呢。正如我所知,使用ajax向不同的域发出请求是不可能的

新的 我想你可以用iFrame做点什么

因此,逻辑是:

  • 有一个空的
    ,带有
    显示:无
  • 有一个
  • 提交并
    preventDefault()
  • 使用查询字符串构建URL
    • 最好是一个完全不同的页面
      newself.php?var1=something&var2=anotherthing
  • 使用URL+querystring将
    附加到隐藏的
    • $('div')。追加(');
  • 从URL获取内容并构建副本表单
  • newself.php
    一些JS,以便在加载文档时自动将表单提交到API URL
  • 清除隐藏的
    内容,等待新提交
起初的 我之所以把这篇文章留在这里,是因为我编辑lol时有人投了更高的票

为了提交到不同的域,他们必须打开服务器以接受跨域帖子

下面是您应该研究的逻辑:

  • AJAX提交到您的PHP文件并执行
    e.preventDefault()
  • 使用PHP将变量发布到其他域
  • 等待其他域的响应
  • 向您的AJAX呼叫发送“是”或“不是”
新 我想你可以用iFrame做点什么

因此,逻辑是:

  • 有一个空的
    显示:无;
  • 有一个
  • 提交并
    preventDefault()
  • 使用查询字符串构建URL
    • 最好是一个完全不同的页面
      newself.php?var1=something&var2=anotherthing
  • 使用URL+querystring将
    附加到隐藏的
    • $('div')。追加(')
  • 从URL获取内容并构建副本表单
  • newself.php
    一些JS,以便在加载文档时自动将表单提交到API URL
  • 清除隐藏的
    内容,等待新提交
起初的 我之所以把这篇文章留在这里,是因为我编辑lol时有人投了更高的票

为了提交到不同的域,他们必须打开服务器以接受跨域帖子

下面是您应该研究的逻辑:

  • 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)

      如果主要目标是让访问者留在网站上并向第三方提交访问者输入