【问题标题】:How to replace window.open(...) with a POST如何用 POST 替换 window.open(...)
【发布时间】:2013-07-22 16:55:44
【问题描述】:

我目前有一些运行window.open(urlWithGetParams) 行的代码。据我所知,这将迫使我使用GET 请求。我想用一个 POST 请求来做到这一点。有解决办法吗?

我也没有与window.open() 结婚。我对任何允许我通过 POST 请求而不是 GET 生成新窗口的替代方案持开放态度。

【问题讨论】:

标签: javascript html


【解决方案1】:

其实我为此做了一个小“库”,在 POST 中打开一个新窗口:

// Arguments :
//  verb : 'GET'|'POST'
//  target : an optional opening target (a name, or "_blank"), defaults to "_self"
window.io = {
    open: function(verb, url, data, target){
        var form = document.createElement("form");
        form.action = url;
        form.method = verb;
        form.target = target || "_self";
        if (data) {
            for (var key in data) {
                var input = document.createElement("textarea");
                input.name = key;
                input.value = typeof data[key] === "object"
                    ? JSON.stringify(data[key])
                    : data[key];
                form.appendChild(input);
            }
        }
        form.style.display = 'none';
        document.body.appendChild(form);
        form.submit();
        document.body.removeChild(form);
    }
};

例子:

io.open('POST', 'fileServer.jsp', {request: {key:"42", cols:[2, 3, 34]}});

要在新窗口中打开,请设置target 参数:

io.open('POST', someURL, someArgs, 'newwin');

或确保每次都是新窗口/标签:

io.open('POST', someURL, someArgs, '_blank');

【讨论】:

  • @corsiKa 只需使用'_blank' 作为目标,每次都在新窗口/标签中打开。
  • 不支持从文本区域换行,因为创建的传输元素是常规的<input>
  • @RadGH +1 因为我只将它与 JSON 一起使用,所以我没有想到这一点。我编辑使用文本区域(未经测试)。
  • 文本区域确实修复了换行问题,感谢更新!
  • 请注意:您可能希望以以下结尾:document.body.removeChild(form);
【解决方案2】:

我所做的是我做一个 javascript AJAX 帖子,然后我把我取回的内容放到一个新窗口中。

类似这样的东西(使用 jQuery,但你可以使用任何 AJAX 实现):

$.post(URL, DATA, function(d){
    var new_window = window.open();
    $(new_window.document.body).append(d);
});

【讨论】:

  • 我应该指出,我尝试过这个并且它的工作原理是减去一件事:关于水晶报告的某些东西(这就是我这样做的目的)不会传递参数。不过,这可能是我实施建议的方式。
  • 我在 Chrome 版本 38 中使用了这个建议的代码,并被弹出窗口阻止程序阻止!
猜你喜欢
  • 1970-01-01
  • 2020-03-02
  • 1970-01-01
  • 2013-11-14
  • 2015-04-17
  • 1970-01-01
  • 1970-01-01
  • 2011-08-06
  • 1970-01-01
相关资源
最近更新 更多