2012-08-22 14 views
1

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

<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'); 
}); 

回答

0

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

2

注意$.ajax是默认异步,和你达到$(this).append(output)时间,output不尚未定义,因为.ajax()通话尚未完成。您需要将append移动到success处理程序,或添加async: false选项,这样$.ajax成为阻塞调用(虽然这违背了使用ajax的目的):

success: function(res) { 
    if (res !='') { 
    var output='<ul id="listname" data-inset=true>'; 
    $.each(res, function(i, Object) { 
     output+='<li>'+Object.reg+'</li>'; 
     console.log(output); 
    }); 
    output+='</ul>'; 
    $(this).append(output).trigger("create"); 
    } 
} 
+0

哦,这是快速和非常有益的,谢谢 – citylayer

+0

'async:false'的建议将证明一个** - 1 ** ... – Andreas

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'); 
    } 

    }); 
}); 
+0

输出(ul)必须为ajax调用,因为我做不想要entrys的子列表 – citylayer

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'); 
    } 
} 

});