如何在不等待回复的情况下发布表单
Posted
技术标签:
【中文标题】如何在不等待回复的情况下发布表单【英文标题】:How to post form without waiting for response 【发布时间】:2014-12-10 05:28:41 【问题描述】:如何发布表单(在 javascript 中)并使浏览器不等待响应?这可能吗?我想要创建的模式是一种“一劳永逸”的模式。这是执行提交的代码:
var iframe = document.createElement("iframe");
var unikString = "UNIQUE STRING";
document.body.appendChild(iframe);
iframe.style.display = "none";
iframe.contentWindow.name = unikString;
var form = document.createElement("form");
form.target = unikString;
form.action = "[THEURL]";
form.method = "POST";
document.body.appendChild((function()
document.createElement("input");
input.type = "hidden";
input.name = "NAME";
input.value = "VALUE";
return input;
)());
setTimeout(function ()
form.submit();
, 0);
(表单发布是这样完成的,因为我必须发布到域外的端点,因此必须克服 CORS 问题。)
【问题讨论】:
将 Ajax 与 async:true 一起使用 ajax如何处理cors? ***.com/questions/5750696/… 【参考方案1】:如果接收脚本的服务器可以修改并且他们使用 php,他们可以设置 ignore user abort
,即使用户关闭 iframe 或窗口,也可以执行表单发布。唯一的问题是您不(也永远不会)知道这是否正常工作,因为您忽略了响应。
http://php.net/manual/en/function.ignore-user-abort.php
否则您发布的表单将被忽略。您唯一能做的就是创建 对表单响应的响应。否则你总是可以忽略它。
【讨论】:
客户端javascript如何处理这个?它会等待响应直到超时吗? 由于您使用的是 iframe,这并不重要。 iframe 将在框架中打印“响应”,但您可以在插入 iframe 并将其定向到 URL 后继续执行。 Javascript 本身是异步的,除非您要求它等待某些东西,否则它会继续执行,而您不是。 (即您所做的唯一操作是插入带有 url 的 iframe,javascript 会这样做并继续前进。如果您使用iframe.load(fn)
,则 fn
会在加载时触发。然后 javascript'等待')。以上是关于如何在不等待回复的情况下发布表单的主要内容,如果未能解决你的问题,请参考以下文章
Ajax 和 JavaScript,如何在不使用 JQuery 的情况下发布数组?
Facebook API:如何在不登录的情况下发布到自己的应用程序墙
如何在不重构的情况下发布两个具有相同源代码但不同包名的 android 应用程序