使用数组参数构建URL

时间:2016-04-07 15:07:08

标签: javascript jquery

我使用jQuery serialize()创建了一个URL,它创建了这样的内容:

  

客户编号= 4和;起始日期&安培;客户编号= 5

问题是我希望有一个这样的数组的URL:

  

客户编号[] = 4和;起始日期&安培;客户编号[] = 5

2 个答案:

答案 0 :(得分:1)

正在序列化的输入元素的[name]必须包含[]才能生成那些与PHP兼容的查询字符串。



$(function () {
  $('form').on('submit', function (e) {
    $('pre').text($(this).serialize());
    e.preventDefault();
  });
});

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<form>
  <input type="text" name="example1">
  <input type="text" name="example1">
  <input type="text" name="example2[]">
  <input type="text" name="example2[]">
  <input type="submit" value="Serialize">
</form>
<pre></pre>
&#13;
&#13;
&#13;

注意:密钥会显示%5B%5D而不是[]。这是预期的,因为这是[]的正确URL编码。

答案 1 :(得分:0)

如果我理解了您的问题,您希望将[]附加到重复的查询字符串项。

JavaScript解决方案是在表单上使用.serializeArray(),标记重复的键/值对,将[]添加到重复项的名称属性中,然后将对象转换回来使用$.param()查询字符串。

function serializeWithDuplicates(form) {
    var pairs = $(form).serializeArray();
    for (i = 0; i < pairs.length; i++)
        for (j = i + 1; j < pairs.length; j++)
            if (pairs[i].name === pairs[j].name)
                pairs[i].isDuplicate = pairs[j].isDuplicate = true;
    for (i = 0; i < pairs.length; i++)
        if (pairs[i].isDuplicate)
            pairs[i].name += "[]";
    return $.param(pairs);
}

JSFiddle