ajax发送和接收之间的时间返回负值

时间:2013-10-27 09:58:26

标签: javascript jquery ajax

我正在尝试测量发送和接收的ajax请求之间的时间,但它通常会返回负值 任何人都可以解释这种奇怪的行为吗?

var before = 0;
var after = 0;
$.ajax({
    url: 'data.php',
    type: 'GET',
    beforeSend: function () {
        before = new Date().getMilliseconds();
    },
    success: function (data, textStatus, xhr) {
        after = new Date().getMilliseconds();
        console.log(after - before);
    },
});

2 个答案:

答案 0 :(得分:3)

将其更改为:

beforeSend: function () {
    before = +new Date();
},
success: function (data, textStatus, xhr) {
    console.log(new Date() - before);
},

当前实现的问题是Date.getMilliseconds()返回给定日期时间的milleseconds 部分 - 这是0到999 [MDN]之间的数字。但实际上你想要比较给定日期时间的“毫秒时间戳” - 这就是{MDN所代表的Date.valueOf()(或Date.getTime()}:

  

valueOf方法返回Date对象的原始值作为   数字数据类型,自午夜01以来的毫秒数   1970年1月,UTC。

然而,您可以省略这些调用,因为-操作首先尝试将其操作数转换为基元(如果它们是对象)。所以这......

console.log(new Date() - before);

...将与...一样处理。

console.log(new Date().valueOf() - before);

因为将before中的起点存储为完整的Date对象没有意义,所以使用+(一元加)运算符将其转换为原始值。

答案 1 :(得分:0)

我认为您在Date.getTime()Date.getMilliSeconds

之间有点困惑

getTime定义为

  

返回指定日期的数值作为数字   自1970年1月1日00:00:00 UTC以来的毫秒数(之前为负数)   次)。

所以,这也可以正常使用

before = new Date().getTime();

测量执行时间的MDN示例使用此

var end, start;

start = new Date();
for (var i = 0; i < 1000; i++)
  Math.sqrt(i);
end = new Date();

console.log("Operation took " + (end.getTime() - start.getTime()) + " msec");