我正在使用jQuery来执行ajax调用 - 其中许多工作正常,但我只是遇到一个奇怪的问题,试图将字符串发送到服务器.我已经将代码缩小到这样:
var x = new String('updateGroup');
var y = 'updateGroup';
$.post('page.aspx', {
f: x,
f2: y
}, function(data) {
});
Run Code Online (Sandbox Code Playgroud)
但是当它命中服务器时,请求变量如下:
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
Run Code Online (Sandbox Code Playgroud)
哪里Request["f[0]"]包含"u"等
有人可以解释为什么会这样吗?
如果您丢弃所有详细信息,那么您的案例中正在执行的内容是:
jQuery.postjQuery.ajax内部调用来执行ajaxjQuery.param在内部调用来构建查询字符串关键是它new String不是一个原始字符串,而是一个字符串对象,并且将通过以下检查jQuery.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 );
}
Run Code Online (Sandbox Code Playgroud)
jQuery.param执行如下:
for ( var prefix in a ) {
buildParams( prefix, a[ prefix ], traditional, add );
}
Run Code Online (Sandbox Code Playgroud)
这意味着它对for in字符串进行循环,这确实将每个字符单独放入查询字符串中。
您可以使用此测试用例检查此行为:
var x = new String("abc");
for(var i in x) {
console.log(i, x[i]);
}
// 0 "a"
// 1 "b"
// 2 "c"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
476 次 |
| 最近记录: |