Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Jquery问题与$.when有关_Javascript_Jquery_Ajax - Fatal编程技术网

Javascript Jquery问题与$.when有关

Javascript Jquery问题与$.when有关,javascript,jquery,ajax,Javascript,Jquery,Ajax,我正在使用一个回调函数,它将检查60秒。如果文件可用,则将返回true,否则将返回false。我在ajax调用后调用的回调函数。。代码如下: $.ajax({ type: '..', url: '..', data: '..', success: function(data) { window.loadFile(data); } }) window.loadFile = function(filePath) { // I'm gettin

我正在使用一个回调函数,它将检查60秒。如果文件可用,则将返回true,否则将返回false。我在ajax调用后调用的回调函数。。代码如下:

$.ajax({
    type: '..',
    url: '..',
    data: '..',
    success: function(data) {
        window.loadFile(data);
    }
})

window.loadFile = function(filePath) { // I'm getting the data. Now passing to call back function
    $.when(window.waitTillFileExistsAndLoad(filePath)).done(function(data) {
        alert(data) // here data is giving me undefined.. 
    });
}

var timer = 0;
window.waitTillFileExistsAndLoad = function(fileName) {

    var checkFile;

    return $.get(fileName, function(data) { // If file found.. 

        timer = 0;
        return true;

    }).error(function() { // If file not found.. 

        timer += 1; 

        if(timer == 30) {

            timer = 0;
            clearTimeout(checkFile);
            return false;

        } else {

            console.log('error occured');
            checkFile = setTimeout(function() {
                window.waitTillFileExistsAndLoad(fileName);
            }, 2000);

        }

    });
}

问题是当我使用
$.when()
时,它会给我未定义的。请告诉我我的代码出了什么问题

您正在调用您的方法,但忘记返回结果-因此它是未定义的(无返回值)。Jamiec,我在waitTillFileExistsAndLoad()方法中将结果返回为true或false。。这有什么不对吗?千万不要使用
done
/
fail
/
error
作为
返回的回调-它们不会连锁。始终使用
then
catch
。但请注意,
catch
直到第3版才添加到jQuery api中。正在使用哪个版本的jQuery?@B77-您的
setTimeout
中的版本不返回结果(并且,由于它位于回调本身中,因此无法返回结果)。