如何在不等待回复的情况下发布表单

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:在不刷新页面的情况下发布表单详细信息[重复]

Ajax 和 JavaScript,如何在不使用 JQuery 的情况下发布数组?

Facebook API:如何在不登录的情况下发布到自己的应用程序墙

如何在不重构的情况下发布两个具有相同源代码但不同包名的 android 应用程序

在不安装 Microsoft Report Viewer 的情况下发布网站

如何在不请求 publish_actions 和 manage_pages 权限的情况下发布到我自己的时间线/页面?