gpt4 book ai didi

JavaScript String 对象在 jQuery.post 上被拆分成一个数组

转载 作者:数据小太阳 更新时间:2023-10-29 06:13:06 24 4
gpt4 key购买 nike

我正在使用 jQuery 执行 ajax 调用 - 其中许多都工作正常,但我在尝试向服务器发送字符串时遇到了一个奇怪的问题。我已将代码缩小为:

var x = new String('updateGroup');
var y = 'updateGroup';
$.post('page.aspx', {
f: x,
f2: y
}, function(data) {
});

然而,当它到达服务器时,请求变量如下:

Request["f"]          null          string
Request["f2"] "updateGroup" string
Request.Form.AllKeys {string[12]} string[]
[0] "f[0]" string
[1] "f[1]" string
[2] "f[2]" string
[3] "f[3]" string
[4] "f[4]" string
[5] "f[5]" string
[6] "f[6]" string
[7] "f[7]" string
[8] "f[8]" string
[9] "f[9]" string
[10] "f[10]" string
[11] "f2" string

其中 Request["f[0]"] 包含 "u"

谁能解释为什么会这样?

最佳答案

如果您丢弃所有细节,您的案例中正在执行的是:

  • jQuery.post
  • 在内部调用 jQuery.ajax 来执行 ajax
  • 在内部调用 jQuery.param 来构建查询字符串

重点是new String 不是原始字符串而是字符串对象,并将传递 following checkjQuery.ajax 中(typeof new String("foo") === "object",而不是 "string"):

// Convert data if not already a string
if ( s.data && s.processData && typeof s.data !== "string" ) {
s.data = jQuery.param( s.data, s.traditional );
}

jQuery.param 正在执行 as follows :

for ( var prefix in a ) {
buildParams( prefix, a[ prefix ], traditional, add );
}

这意味着它对字符串执行 for in 循环,这确实将每个字符分别放入查询字符串中。

您可以使用此测试用例检查此行为:

var x = new String("abc");

for(var i in x) {
console.log(i, x[i]);
}

// 0 "a"
// 1 "b"
// 2 "c"

关于JavaScript String 对象在 jQuery.post 上被拆分成一个数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8679274/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com