setInterval和Ajax

rey*_*yes 2 javascript ajax jquery

当我使用setInterval和ajax从数据库中检索数据时,我有这个问题,如果我从数据库中检索的数据等于saveHere那么它将再次循环,直到它与变量saveHere不匹配,它冻结浏览器直到数据我检索的不等于saveHere.

这是一个例子:

var saveHere = 'RED';
var interval = setInterval(function() {

    var sample = $.ajax({
        type: 'GET',
        url: 'database.php',
        data : data
    }).responseText;

    if (sample != 'RED') {
        clearInterval(interval);
        saveHere = sample;
    }
    else {
        console.log('load again');
    }

},1000);
Run Code Online (Sandbox Code Playgroud)

我真的需要建议.先感谢您.对不起语法.

Zna*_*kus 7

$.ajax 是异步的,需要您使用回调来获取响应文本.

请查看http://api.jquery.com/jQuery.ajax/上的文档.

你想要做的是添加一个success参数.像这样的东西:

var saveHere = 'RED';

doAjax();

function doAjax() {

    $.ajax({
        type: 'GET',
        url: 'database.php',
        data: data,
        success: function (sample) {
            if (sample != 'RED') {
                saveHere = sample;
            } else {
                console.log('load again');
                doAjax();
            }
        }
    });

}
Run Code Online (Sandbox Code Playgroud)

请注意我是如何删除setInterval并将Ajax代码包装在函数中的.在success当阿贾克斯查询已成功完成回调将被调用,并给你的反应.一旦我们评估了响应,我们就可以doAjax再次运行该函数来再次运行查询.