1

我使用 jQuery 创建一个新的 HTML,但是当我使用 $.get 或 $.ajax 方法时它无法获取该数据?例如我测试了一个简单的 jQuery :

$(function () {
    $(".tc3").html('<div id="test" ></div>');

    if($('.noprint a[href*="/f1-"]:first').length){
        $.ajax({
            url: '/f1-' ,
            type: 'GET',
            success: function(data) { 
                d = $('#test', data).length;
                alert(d)
            } 
        });
    }
});

但是当我尝试它时 alert 结果是 0 。所以为什么 ?谢谢您的回复

4

4 回答 4

3

虽然我可能弄错了,但我相当肯定您的语法不正确。

在表达式$('#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 的元素),我只能假设您打算将 的内容附加datatestdiv。如果我的假设是正确的,您应该将成功方法更改为:

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。

注意:除了解决您的语法之外,这个答案的大部分都是推测性的,因为我不确定您要完成什么。为您的问题添加更多详细信息将有助于我们更好地解决您的问题。

于 2013-07-19T03:25:47.537 回答
0

为什么你在同一个 jQuery 选择器中同时#test拥有两者?data

尝试

success : function(data){
   test = $("#test").length;
   d = data.length;
   alert("Test length: " + test + "\nData length: " + data);
}
于 2013-07-19T03:21:13.187 回答
0

您打算通过将数据作为第二个参数传递给 $('#test', data) 来做什么?第二个参数是评估第一个参数(选择器)的上下文。你从服务器返回什么数据?它必须是 '#test' 选择器的父级才能工作。

于 2013-07-19T03:23:10.887 回答
0

如果我查看您的 Javascript ( codefm1.forumvi.com/99787.js ):

$(function(){

    $(".tc3").html('<div id="test" ></div>');
    if($('.noprint a[href*="/f1-"]:first').length){

        $.ajax({

            url:'/f1',
            type:'GET',
            success:function(data){

                test=$("#test").length;
                d=data.length;alert("Test length: "+test)
            }

        }
        )
    }

}
);
$(function(){
    $(".tc3").html('<div id="test" ></div>');if($('.noprint a[href*="/f4-"]:first').length){
        $.ajax({
            url:'/f4-',type:'GET',success:function(data){
                $('#test').html(data);var d=data.length;alert(d)
            }

        }
        )
    }

}
);

我看到您的第一个alert仅确认#test此时尚不存在。尝试data.length在第一个 ajax 请求而不是$('#test').length. 如果它仍然返回 0 则意味着没有返回任何内容。

于 2013-07-19T03:46:59.650 回答