3

将对象作为调用传递dataajax,我得到了一些意想不到的结果。出于某种原因,如果参数名称的值是数组,则 jQuery 会在我的参数名称中添加方括号。例如...

var obj =
    {
        name: "John Doe",
        courses: [ 1, 2, 4 ]
    };

...变成name=John+Doe&courses[]=1&courses[]=2&courses[]=4而不是name=John+Doe&courses=1&courses=2&courses=4.

为什么jQuery要添加方括号?

这是一个工作示例:http: //jsfiddle.net/BrHSy/

更新:

我希望上面的示例生成一个类似于此示例中的查询字符串的字符串:

<html>
    <head></head>
    <body>
        <form method="GET">
            <input type="hidden" name="name" value="John Doe"/>
            <input type="hidden" name="courses" value="1"/>
            <input type="hidden" name="courses" value="2"/>
            <input type="hidden" name="courses" value="4"/>

            <button>Go!</button>
        </form>
    </body>
</html>

请注意,由表单 (www-form-urlencoded) 生成的查询字符串没有方括号。

4

1 回答 1

4

我找到了自己的答案。看起来 jQuery 在使用 对数据进行编码时$.param,并没有专门www-form-urlencode针对数据。它正在序列化它。在 jQuery 1.4 之前,结果会如预期的那样。

那么,对我来说,解决方案是通过传递来使用传统逻辑true

$.param(obj, true);

这导致:name=John+Doe&courses=1&courses=2&courses=4

调用时$.ajax(),您可以设置traditional选项true让 jQuery 以传统预期的方式对数据进行编码。似乎这traditional应该是默认值,因为 jQuery 的ajax函数默认情况下使用www-form-urlencode内容类型。但是,当数据被发送到服务器时,最终结果是一个格式www-form-urlencode错误的数据块(根据 HTML 表单的一般处理方式,如果它们有多个同名输入)。

此处更新示例:http: //jsfiddle.net/BrHSy/1/

于 2013-03-20T12:48:48.893 回答