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

和被发送到一个 php 文件indexold_ts其中的输出将类似于0: 1 minute ago.

我收到的警报不是按顺序排列的(从 0 到最高)。会是这样的;

第一次警报: 9:10 分钟前

第二次警报: 2:4 分钟前

第三次警报5:8 分钟前

如您所见,警报不是按索引顺序排列的,因此每个函数必须ago-time随机选择 's。

4

2 回答 2

1

each确实在 jQuery 对象上按顺序迭代匹配的元素,但这里的误解是另一个。

$.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 回答