Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/77.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
递归jquery ajax_Jquery_Ajax_Recursion - Fatal编程技术网

递归jquery ajax

递归jquery ajax,jquery,ajax,recursion,Jquery,Ajax,Recursion,我希望我的函数处理结果,然后从done回调调用自己 function geocode(id) { console.log(id + ' geocode'); $.ajax({ url: '/customers/' + id + '/geocode', dataType: 'json', data: { id: id, } }).done(function() { var

我希望我的函数处理结果,然后从
done
回调调用自己

function geocode(id) {
    console.log(id + ' geocode');
    $.ajax({
        url: '/customers/' + id + '/geocode',
        dataType: 'json',
        data: {
            id: id,
        }
    }).done(function() {
        var newID = id++;
        console.log(id + ' done.');
        geocode(newID);
    });
}

但这并不是递增的,比如说,如果我从1开始,它就会一直循环到2。我知道从ajax返回数据是件痛苦的事,但我还没有完全理解其中的细微差别

在将变量设置为
newId
的值之前,需要先增加变量:

function geocode(id) {
    console.log(id + ' geocode');
    $.ajax({
        url: '/customers/' + id + '/geocode',
        dataType: 'json',
        data: {
            id: id,
        }
    }).done(function() {
        console.log(id + ' done.'); // show this before incrementing
        var newID = ++id; // note the operator order here
        geocode(newID);
    });
}

您的id在第一次迭代时为1,在第二次(以及第三次、第四次等)迭代时为1,并且您从不更新其值

试试这个:

function geocode(id) {
    console.log(id + ' geocode');
    $.ajax({
        url: '/customers/' + id + '/geocode',
        dataType: 'json',
        data: {
            id: id,
        }
    }).done(function() {
        id = id++;
        console.log(id + ' done.');
        geocode(id);
    });
}

你到底想要什么?您想从ajax请求中得到响应吗?这在逻辑上与OP当前拥有的内容相同。他不需要上下文吗?可能,这取决于
id
的范围,以及它在代码中的其他地方的使用情况(此处未显示)。@mplungjan为什么,设置了正确的上下文,因为我可以看到它工作得很好。我需要进一步研究一下操作符,我没有意识到
I++
++I
console.log(id+'done')之间会有区别应在预增量之前设置,以获得较旧的值