1

出力に問題があります。出力に ajaxcall からのデータを入力したいのです。呼び出しは成功します ( each 内の出力はデータで満たされます) が、 each 内の出力は出力 outside に追加されません。私はいつも「

<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

4 に答える 4

2

これ$.ajaxはデフォルトでは非同期であり、呼び出しがまだ終了していないため、到達するまで$(this).append(output)outputはまだ定義されていないことに注意してください。をハンドラー.ajax()に移動するか、オプションを追加する必要があります。これにより、ブロッキング呼び出しになります(ただし、これは使用目的を無効にします)。appendsuccessasync: false$.ajaxajax

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");
  }
}
于 2012-08-22T09:40:17.797 に答える
0

AJAXは非同期です。を書き込む$.ajax( ... )と、HTTPリクエストがサーバーに送信され、サーバーは次の操作に進みますoutput += '</ul>'outputこの時点でHTTPリクエストは終了していないため、ドキュメントに追加するまでにコールバックはまだ実行されていません。

于 2012-08-22T09:41:13.753 に答える
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');
    }

  });
});
于 2012-08-22T09:42:20.120 に答える
0

変数を使用するすべてのコード行をoutputajax 呼び出しの成功関数に移動すると、それが機能することがわかります。問題は、非同期性を間違って使用していることです。

このようなもの:

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

});

于 2012-08-22T09:43:25.983 に答える