【问题标题】:Is it possible to customize how jQuery serializes AJAX url parameters?是否可以自定义 jQuery 如何序列化 AJAX url 参数?
【发布时间】:2016-06-01 04:21:19
【问题描述】:

除了编写我自己的序列化程序之外,是否可以以特定方式告诉 jQuery/AJAX 调用来格式化查询字符串参数?

我有一个 jQuery AJAX 调用,并且正在传递一个包含 URL 参数的对象

var params = {name: 'somename', favColors: ['red','blue']};

检查 AJAX 调用 $.get("/Controller/Action/", params) 显示 URL 参数字符串为 ?name=somename&favColors[]=red&favColors[]=blue

目标 URL 期望查询参数不包含重复数组值的 [],例如?name=somename&favColors=red&favColors=blue

谢谢!

【问题讨论】:

    标签: javascript jquery ajax


    【解决方案1】:

    您可以使用jQuery.param() 及其第二个参数traditional,将结果提供给$.get()

    var params = {name: 'somename', favColors: ['red','blue']};
    
    $.get("/Controller/Action/", $.param(params, true))
    

    参数描述为:

    一个布尔值,指示是否执行传统的“浅”序列化。

    在这种情况下:

    console.log($.param(params, true));
    // "name=somename&favColors=red&favColors=blue"
    

    【讨论】:

    • 从来没有停下来弄清楚 traditional 是什么,我想因为我从来不需要它......现在让我的答案看起来很傻
    • 谢谢,这正是我所追求的解决方案!
    【解决方案2】:

    $.get() 也接受查询字符串作为第二个参数而不是对象。您可以使用它来附加自定义生成的查询字符串。 ? 会为您附加,因此您无需添加。

    【讨论】:

      【解决方案3】:

      jQuery 使用$.param() 对来自对象的数据字符串进行编码。您可以自己使用它并删除编码为%5B%5D[]

      如其他答案字符串中所述,可以使用作为数据参数的对象

      类似:

      var reg =/%5B%5D/g;
      var params= $.param({name: 'somename', favColors: ['red','blue']}).replace(reg,'');
      $.get("/Controller/Action/", params)
      

      仅在浏览器控制台中测试

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-10-11
        • 2022-07-01
        • 2021-02-06
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多