1

.xml ファイルからの情報を含むテーブルを動的に作成するために、別の jquery .each ループでループを作成しようとしています。以下のコードの結果により、最後のテーブル エントリが DoM31 であるすべての xml 情報を取得します。なぜこれが起こっているのかわかりません。

function ttrpdom() {
  for (var i=0;i<31;i++) {
    var mypost = 'http://mysite/TotalDailyRes' + i + '.xml';
    var dm = '#DoM' + i;
    $.post(mypost, function(data) {
      $(data).find('opensearch\\:totalResults').each(function() {
        var res = $(this).text();
        $(dm).append('<td>' + res + '</td>');
      });
    } , 'text');
  }
}
4

1 に答える 1

1

ループは関数呼び出しforによってブロックされません。$.postしたがって、POST要求が完了していなくても、変更idm続けてください。

コードのウォークスルー:

i === 0
Set `mypost` variable to `http://mysite/TotalDailyRes0.xml`
Set `dm` variable to `#DoM0`
Make POST request to `mypost`
Loop

Increment i
i === 1
Set `mypost` variable to `http://mysite/TotalDailyRes1.xml`
Set `dm` variable to `#DoM1`
Make POST request to `mypost`
Loop

....    

Increment i
i === 30
Set `mypost` variable to `http://mysite/TotalDailyRes30.xml`
Set `dm` variable to `#DoM30`
Make POST request to `mypost`

END LOOP

....

POST http://mysite/TotalDailyRes0.xml completes
Fire `function(data)` callback
dm === '#Dom30'

POST http://mysite/TotalDailyRes1.xml completes
Fire `function(data)` callback
dm === '#Dom30'

....

POST http://mysite/TotalDailyRes30.xml completes
Fire `function(data)` callback
dm === '#Dom30'

さらに、POSTリクエストが順番に完了する保証はありません。のリクエストhttp://mysite/TotalDailyRes28.xmlは、完了する前に完了する可能性http://mysite/TotalDailyRes30.xmlがあります。

解決策は、完成したURLを検出し、それを使用してHTMLIDを作成することです。また、GETリクエストはサーバー上のデータを変更しないため、このコンテキストではより適切です。

    $.get(mypost, function(data) {
      var i = parseInt(this.url.replace('http://mysite/TotalDailyRes', ''), 10),
      dm = '#DoM' + i;
      $(data).find('opensearch\\:totalResults').each(function() {
        var res = $(this).text();
        $(dm).append('<td>' + res + '</td>');
      });
    } , 'text');
于 2012-12-20T01:38:01.470 に答える