前言

们知道,打开一个新窗口,是只能带get参数的,如果想带post参数该怎么办呢?这个时候只要新建一个窗口,插入一个post表单即可 。

上代码

参考了网上的一个js函数,修改了一下,让其支持多个参数post,并且支持string参数和json关联数组,现将代码分享出来。

test.html

<a onclick="openWindowWithPost('http://127.0.0.1/test.php', 'a=b&c=d&x[]=o&x[]=oo')">test string</a>
<br/>
<a onclick="openWindowWithPost('http://127.0.0.1/test.php', {'name':'xx','age':'24','sex':'1','cn':'中文'})">test json</a>

<script>
    /**
     * 在新窗口中打开带post数据的url,param支持字符串和json
     * by hisune.com
     */
    function openWindowWithPost(url, param) {
        var newWindow = window.open(url, 'newWindow');
        if (!newWindow)
            return false;

        var html = "";
        html += "<!DOCTYPE html><html><head><meta charset='utf-8'></head><body><form id='form-id' method='post' action='" + url + "'>";

        switch(typeof param){
            case 'string':
                var newParam = {}, seg = param.split('&'), len = seg.length, i = 0, s;
                for (; i < len; i++) {
                    if (!seg[i]) continue;
                    s = seg[i].split('=');
                    html += "<input type='hidden' name='" + s[0] + "' value='" + s[1] + "'/>";
                }
                break;
            case 'object':
                for (var o in param)
                    html += "<input type='hidden' name='" + o + "' value='" + param[o] + "'/>";
                break;
        }

        html += "</form><script type='text/javascript'>document.getElementById('form-id').submit();";
        html += "<\/script></body></html>".toString().replace(/^.+?\*|\\(?=\/)|\*.+?$/gi, "");
        newWindow.document.write(html);

        return newWindow;
    }
</script>

后端测试页面,test.php

<?php
header("Content-type: text/html; charset=utf-8");

var_dump($_POST);

效果如下

string:
array (size=3)
  'a' => string 'b' (length=1)
  'c' => string 'd' (length=1)
  'x' => 
    array (size=2)
      0 => string 'o' (length=1)
      1 => string 'oo' (length=2)
json:
array (size=4)
  'name' => string 'xx' (length=2)
  'age' => string '24' (length=2)
  'sex' => string '1' (length=1)
  'cn' => string '中文' (length=6)

如果您觉得您在我这里学到了新姿势,博主支持转载,姿势本身就是用来相互学习的。同时,本站文章如未注明均为 hisune 原创 请尊重劳动成果 转载请注明 转自: js实现在新窗口中打开带post数据的url - hisune.com