3

関数ごとに jQuery を使用する必要がありますが、最初の要素から最後の要素まで機能する必要もあります。現在、基準に一致するランダムな要素を選択しているようです。

ここに私が持っているものがあります:

$(".ago-time").each(function(index) {
    var old_ts = $(this).data("ts2");
    $.get("phpscripts/get_new_time.php", {
        old_ts: old_ts,
        index: index
    }, function(result) {});
    alert(result);
});

indexとはold_tsphp ファイルに送られ、出力は0: 1 minute ago.

アラートに表示される内容が正しくありません (0 から最高まで)。このようなものになります。

最初のアラート: 9: 10 分前

2 番目のアラート: 2: 4 分前

3 番目のアラート5: 8 分前

ご覧のとおり、アラートはインデックス順ではないため、各関数は をago-timeランダムに選択する必要があります。

4

2 に答える 2

1

eachjQueryオブジェクト上で一致した要素を順番に繰り返しますが、ここでの誤解は別のものです。

$.getは省略形$.ajaxの関数であり、非同期のHTTPリクエストです。この場合のコールバック関数:

function(result) {
  alert(result);
}

サーバーから応答を取得すると、非同期で呼び出されます。

しかし、どうやら、あなたの場合、これは無関係であり、サーバーの応答をデバッグしようとしているときのあなたからの誤解です。

たとえば、コードでは、サーバーからそれぞれのDOM要素に応答を受信するときに応答を設定するだけです。

$(".ago-time").each(function(idx) {
  var $self = $(this);
  $.get("phpscripts/get_new_time.php", {
    old_ts: $self.data("ts2"),
    index: idx
  }, function(result) {
    $self.html(result);
  });
});
于 2012-10-20T13:15:46.280 に答える
0

$.getは順番に呼び出されますが、呼び出しが非同期であるため、順番に応答を取得できるとは限りません。

(jquery.ajax を使用し、オプション async:false を渡すことによって) 呼び出しを同期に変更すると、必要な効果が得られます (ただし、サーバーへの呼び出しごとに UI をブロックし、ひどいユーザーを提供します)。経験)

于 2012-10-20T12:51:33.387 に答える