【问题标题】:Emulate form submit with jQuery/Ajax使用 jQuery/Ajax 模拟表单提交
【发布时间】:2016-01-30 16:08:47
【问题描述】:

我想使用 jQuery 和 Ajax 进行发布请求以及标头重定向。通常,当提交表单时,您会被传输到不同的页面,并且您发布的数据也会随之而来(以我不理解的方式)。这就是我想用 Ajax 执行的操作。如果我这样做:

$.ajax({
 type: "POST",
 url: "https://hello/theurl",
 data: output,
 dataType: 'text',
 contentType: "application/x-www-form-urlencoded; charset=UTF-8",
 success: window.location = "https://hello/theurl",
 error: function(requestObject, error, errorThrown) {
        alert(error);
        alert(errorThrown);
    }
 });

..当我被重定向到页面时,它会要求丢失数据-所以我猜帖子请求与标题重定向的协调方式与表单帖子上的方式相同。

并且发布请求也失败:“No 'Access-Control-Allow-Origin'”。我将数据作为“文本”发送,它是一个字符串,输入以“a = b&”的形式连接。我没有转义这个字符串 - 也许我应该使用“encodeURI()”或其他东西(虽然它不是一个 url)?但是为什么“错误”和“成功”都在执行,不应该只是其中一个吗?

我已经阅读了许多使用 .submit() 方法的示例,该方法在用户单击提交按钮时被激活。我的情况不同:在提交时,加载相同的页面,$_POST 通过 PHP 验证(在同一页面上),然后启动 javascript 函数。所以我认为我不能使用“submit()”函数,因为它会在单击提交按钮时做出反应。另一个问题是,我可以从 javascript 模拟这个提交点击吗?

【问题讨论】:

  • success: window.location = "https://hello/theurl", 您缺少在处理程序周围包装匿名函数。所以在你的情况下,window.location 在所有情况下都会被调用。并且要模拟表单提交,只需在节点上调用submit() DOM 方法(如果您不绑定任何阻止提交行为的 jq 处理程序,您也可以使用 jq 方法)
  • 很高兴知道,谢谢。

标签: php jquery ajax forms http-post


【解决方案1】:

您在 AJAX 代码中所做的事情(在修复成功功能之后)是:您两次调用“theurl”页面,首先是在带有数据的 POST 中,然后在完成后您将再次访问它在没有数据的 GET 中。如果您想使用数据重定向到该 url,只需执行 form.submit()。

【讨论】:

  • 如果执行 form.submit(),我猜这将代替 ajax 发布请求完成?它只需要一个javascript函数,我在里面放了 nameoftheform.submit() ,对吗?那么问题是我必须将表单操作更改为 url。最初它被发布到同一页面。
  • 是的,它会代替 AJAX 调用来完成,你应该将表单操作更改为你想要去的 URL ("hello/theurl")。如果它是根据什么而改变的用户选择,您可以在提交之前更改 javascript 中的表单操作。为此,只需执行以下操作:$("#form_id").attr("action","hello/theurl")。
  • 我已经测试过这个方法,它有效!我会用这个而不是我最初的想法,因为它更简单。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-12
  • 1970-01-01
  • 1970-01-01
  • 2010-09-30
相关资源
最近更新 更多