2012-08-22 13 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'); 
    } 
} 

});