$ .ajax获取数据不会附加到var

时间:2012-08-22 09:36:59

标签: javascript jquery jquery-mobile

输出有问题:我想从ajaxcall中填充一些数据。 调用是成功的(每个内部的输出都填充了数据) 但每个issnt内部的输出都附加到外部输出。 我总是说“

<ul id="listname" data-inset=true></ul>

而不是

  <ul id="listname" data-inset=true><li>some data</li></ul>

$("div:jqmData(role='collapsible')").each(function(){
var id = $(this).data("id");
     var idDate=id.slice(7,18);
     var listapp="id_col_"+idDate;
      var listname="id_col_"+idDate;
                   output='<ul id="listname" data-inset=true>';

                             $.ajax({
                             url: 'lomodata.php',
                             data: 'timestamp='+idDate,
                             type: 'GET',
                             ContentType: "application/json",
                             dataType: "json",
                             success:function(res) {
                             if(res !='')
                            {
                            $.each(res, function(i, Object) {
                             output+='<li>'+Object.reg+'</li>';
                              console.log(output);
                            }); 
                             }
                             }

                             });

                    output+='</ul>';

                    $(this).append(output).trigger("create");
                    $(this).listview();
                    $(this).listview('refresh');
});

4 个答案:

答案 0 :(得分:2)

请注意,$.ajax默认为异步,当您到达$(this).append(output)时,output尚未定义,因为.ajax()电话尚未完成。您需要将append移动到success处理程序,或添加async: false选项,以便$.ajax成为阻止调用(尽管这会违背使用{{}的目的1}}):

ajax

答案 1 :(得分:0)

AJAX是异步的。当您编写$.ajax( ... )时,HTTP请求将被发送到服务器,然后服务器将继续执行下一个操作output += '</ul>'。此时HTTP请求将不会完成,因此在您将output附加到文档时,您的回调将不会被执行。

答案 2 :(得分:0)

$("div:jqmData(role='collapsible')").each(function () {
  var el = this;
  var id = $(this).data("id");
  var idDate = id.slice(7, 18);
  var listapp = "id_col_" + idDate;
  var listname = "id_col_" + idDate;

  $.ajax({
    url: 'lomodata.php',
    data: 'timestamp=' + idDate,
    type: 'GET',
    ContentType: "application/json",
    dataType: "json",
    success: function (res) {
      output = '<ul id="listname" data-inset=true>';

      if (res != '') {
        $.each(res, function (i, Object) {
          output += '<li>' + Object.reg + '</li>';
          console.log(output);
        });
      }

      output += '</ul>';

      el.append(output).trigger("create");
      el.listview();
      el.listview('refresh');
    }

  });
});

答案 3 :(得分:0)

如果将使用output变量的所有代码行移动到ajax调用的成功函数,您将看到它有效。问题是你错误地使用了异步性。

这样的事情:

$.ajax({
 url: 'lomodata.php',
 data: 'timestamp=' + idDate,
 type: 'GET',
 ContentType: "application/json",
 dataType: "json",
 success: function (res) {
   if (res != '') {
    var output = '<ul id="listname" data-inset=true>';
    $.each(res, function (i, Object) {
       output += '<li>' + Object.reg + '</li>';
     });
    output += '</ul>';

    console.log(output);

    $("#myObject").append(output).trigger("create");
    $("#myObject").listview();
    $("#myObject").listview('refresh');
  }
}

});