关于jquery中$ .ajax的问题

时间:2010-12-15 09:57:04

标签: javascript ajax jquery

首先我使用$ .ajax在我的html页面中加载html代码

for(var i=0;i<5;i++)
{
    $.ajax({
        type: "get",
        url: "test.xml",
        async: false,   //without set the async to false could cause problem,I also don't konw why
        dataType: "html",
        timeout: 2000,
        success: function (xml) {
             var $temp_code = $(xml).find("test[id='" + i+ "']").find("html_code").html();
            //the html code is like <div class="test"></div>……
             $($temp_code).appendTo($(".wrapper")).show();
    });
}

代码可以在页面中正常工作,xml中的html代码可以正确读取。然后我想给每个“test”div绑定一个单击函数

喜欢

        $(".test").click(function () {
            alert("");
        });

但是这不会成功,点击每个“测试”警报什么

然后我尝试将它放入$ .ajax完全像:

$.ajax({
   ……
   complete:function(){
            $(".test").click(function () {
                alert("");
            });
   }
})

这只能用于第一个“测试”div,它意味着只需点击第一个“测试”就可以提醒

如何解决此问题?让点击在每个“测试”中工作,

谢谢!

3 个答案:

答案 0 :(得分:1)

你想要的是什么,这也是很多更快,因为它使用该AJAX请求的结果(应该是相同的)用于循环,而不是重复地发出请求,像这样:

$.ajax({
  type: "get",
  url: "test.xml",
  dataType: "html",
  success: function (xml) {
    for(var i=0;i<5;i++) {
      var $temp_code = $(xml).find("test[id='" + i+ "']").find("html_code").html();
      $($temp_code).appendTo($(".wrapper")).show().find(".test").click(function () {
        alert("");
      });
    }
  }
});

这样做只会将.click()仅绑定到刚刚添加的元素,.test创建的<div> $($temp_code)元素。

答案 1 :(得分:0)

尝试使用.live()(http://api.jquery.com/live/)

答案 2 :(得分:0)

在第一个脚本片段中,您需要引用xml.d来访问GET返回的内容。

success: function (xml) {
             var $temp_code = $(xml.d).find("test[id='" + i+ "']").find("html_code").html();

我认为这也可以让你点击处理程序。