使用domready进行AJAX调用

3

在尝试使用JQuery访问元素之前,有没有方法可以知道这些元素是否存在于文档中?

代码片段:

var s = new AjaxCall(someurl);

s.oncomplete = function(response) {
    var container = $('container_id');
    container.innerHTML = response;
    var ul = $('some_id'); }

响应是通过Ajax调用返回的一些HTML。

这个响应更新了一个div的内容,然后我访问了由innerHTML创建的一个元素(代码中的ul)。

如果响应很大,我认为在尝试访问它们时,有时候会出现一些元素没有被渲染。 domready适用于AJAX调用吗?这能解决我的问题吗?

2个回答

2

您似乎忘记使用#,正确的写法应该是$('#some_id');而不是$('some_id');。我建议改用document.getElmenetById,这样更易读,比基于上下文的ID匹配效率更高。

var some_id = document.getElmenetById("some_id");

关于您提到的元素“不可用”的问题,不用担心。innerHTML设置器执行同步操作。如果从中解析出具有匹配ID的标签,则在设置innerHTML后立即可以使用相应的元素。


嗨,Garrett,谢谢你的贡献。 - Thomas

0
如果您正在使用jQuery,那么您的请求的success函数将是:
$.ajax({
  url: "test.html",
  cache: false,
  success: function(resp){
    var ul = $("#containerID").html(resp).find("#ElementInRespID");
    //do something with ul
  }
});

这将把结果放入容器中,在其中找到您想要的元素并将 ul 变量设置为它。


你好,虽然我没有使用JQuery,但是有人知道JQuery用了什么来实现上述代码吗?我很确定他们也在他们的html方法中调用了innerHTML。 - Thomas
1
@Thomas - 他们的调用很好,功能很多 :) 美妙之处在于它消除了跨浏览器的问题。完整的源代码可供浏览,这里是 Ajax 部分,您可以看到正在发生什么:http://github.com/jquery/jquery/blob/master/src/ajax.js - Nick Craver

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接