虽然我可能弄错了,但我相当肯定您的语法不正确。
在表达式$('#test', data)
中,您data
作为上下文传入以限制您的选择器#test
, 可以匹配的内容。
从jQuery 文档:
默认情况下,选择器从文档根目录开始在 DOM 中执行搜索。但是,可以使用 $() 函数的可选第二个参数为搜索提供替代上下文。例如,要在事件处理程序中进行搜索,可以像这样限制搜索:
$( "div.foo" ).click(function() {
$( "span", this ).addClass( "bar" );
});
当对 span 选择器的搜索仅限于 this 的上下文时,只有单击元素内的 span 才会获得附加类。
在内部,选择器上下文是用.find()
方法实现的,所以 $( "span", this )
等价于$( this ).find( "span" )
.
考虑到这一点,您的上述data
对象必须是 DOM 元素、文档或 jQuery 对象,才能正确约束#test
选择器的范围。由于data
不太可能是这些对象中的任何一个,因此该约束将产生一个无效的范围#test
以供找到。因此,0 被警告。
由于我不相信限制#test
选择器是您的意图(毕竟test
无论上下文如何,在有效的 HTML 页面上只能有一个 id 的元素),我只能假设您打算将 的内容附加data
到test
div。如果我的假设是正确的,您应该将成功方法更改为:
success: function(data) {
var d = $('#test').html(data).length;
alert(d);
}
在这种情况下,长度将为 1,因为html()
链接到初始$('#test')
选择器。并且由于页面上只有一个 Id 为 的元素,因此test
会警告 1。
相反,如果您想要数据的长度,则可以直接询问它,data.length
这应该根据返回的对象或字符串为您提供适当的结果。
success: function(data) {
$('#test').html(data);
var d = data.length;
alert(d);
}
最后,如果data
可以为空、未定义或其他错误,您可以使用var d = data ? data.length : 0;
它来确保它始终默认为 0。
注意:除了解决您的语法之外,这个答案的大部分都是推测性的,因为我不确定您要完成什么。为您的问题添加更多详细信息将有助于我们更好地解决您的问题。