0

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

2 に答える 2

3

これを次のように変更します。

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

現在の実装の問題は、指定された日時のミリ秒部分Date.getMilliseconds()を返すことです。これは、0 から 999 までの数値です [ MDN ]。しかし、実際には、指定された日時の「ミリ秒スタンプ」を比較したい - そしてそれが [ MDN ]の(または) です:Date.valueOf()Date.getTime()

このvalueOfメソッドは、UTC 1970 年 1 月 1 日の午前 0 時からのミリ秒数である数値データ型として Date オブジェクトのプリミティブ値を返します。

ただし、これらの呼び出しは省略できます。-操作は最初にオペランドをプリミティブ (オブジェクトの場合) にキャストしようとするためです。したがって、この...

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

... は ... と同じように処理されます。

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

開始点を完全な Date オブジェクトとして格納するのはほとんど意味がないため、 (単項プラス) 演算子beforeを使用してプリミティブ値にキャストします。+

于 2013-10-27T10:03:01.083 に答える