Javascript 如何递归调用ajax,直到某个条件变为真?

Javascript 如何递归调用ajax,直到某个条件变为真?,javascript,jquery,ajax,recursion,Javascript,Jquery,Ajax,Recursion,我尝试递归调用ajax方法,直到maxnumId为空或未定义。我当前的代码只触发一次!谁能告诉我我做错了什么?谢谢 代码如下: <script> var maxnumId = null; function callApi4() { $.ajax({ type: "GET", dataType: "jsonp", cache: false, url: "ht

我尝试递归调用ajax方法,直到
maxnumId
为空或未定义。我当前的代码只触发一次!谁能告诉我我做错了什么?谢谢

代码如下:

<script>
    var maxnumId = null;

    function callApi4() {
        $.ajax({
            type: "GET",
            dataType: "jsonp",
            cache: false,
            url: "https://api.somesite.com/ddddd" + ( maxnumId ? "&max_id=" + maxnumId : ""),
            success: function(data) {
                maxnumId = data.pagination.next_max_id;
                alert('maxnumId is now: ' + maxnumId);
                document.myform.outputtext.value = document.myform.outputtext.value+data.pagination.next_max_id+'\n' ;

            for (var i = 0; i < 100; i++) {

            $(".content").append("<img class='image' src='" + data.data[i].images.low.url +"' />");   
            }

              if(maxnumId != "undefined"){
                setTimeout(callApi4(), 2000);
               }
               else
               {
                 alert('finished');
               }
            }
        });
    }
    </script>

<button onclick="callApi4()">call ajax first time</button>

var maxnumId=null;
函数callApi4(){
$.ajax({
键入:“获取”,
数据类型:“jsonp”,
cache:false,
url:“https://api.somesite.com/ddddd“+(maxnumId?”&max_id=“+maxnumId:”),
成功:功能(数据){
maxnumId=data.pagination.next_max_id;
警报('maxnumId现在为:'+maxnumId);
document.myform.outputtext.value=document.myform.outputtext.value+data.pagination.next_max_id+'\n';
对于(变量i=0;i<100;i++){
$(“.content”)。追加(“”);
}
如果(maxnumId!=“未定义”){
setTimeout(callApi4(),2000);
}
其他的
{
警报(“完成”);
}
}
});
}
第一次调用ajax

而不是
设置超时(callApi4(),2000)写入<代码>设置超时(Callapi42000)
,从callApi4方法中删除括号。

您实际上是在if中查找字符串“undefined”还是实际未定义的maxnumId值?如果要查找未定义的值,则需要删除引号。如果不是这个问题,你从服务器上得到了什么输出?尽管我上面的评论可能对最初的问题没有帮助。。。从逻辑上看,我希望这会给你无限的回调。您实际得到了什么输出?谢谢您的回复。当我第一次运行这个函数时,我从第一个api调用中得到一组数据。然后我就不会从服务器上得到任何数据了!我希望在第一次通过按钮调用函数之后,api会被调用,直到我得到maxnumId的空数据!但即使在发出递归调用的if和else语句中放置了警报,警报也不会弹出!所以我认为我的递归调用不起作用!是的,我认为爱德华多费尔南德斯实际上为你找到了正确的答案。当超时调用中有括号时,它实际上并没有传入函数,而是传入其返回值。如果你在那之后开始得到一个无限循环,那么我的未定义的建议可能就是问题所在。我没有得到任何无限循环!ajax只会被调用一次,这是通过单击按钮实现的,ajax调用的其余部分应该使用settimeout完成,但它不会再次调用ajax!我甚至试过了。我甚至放置了setTimeout(callapi42000);外部if语句仍然没有调用ajax,我也没有得到响应!把它放在循环之外。没有调用它,因为代码在其他地方中断。您必须有一个试图访问属性的null属性。我相信您有null对象,可以在这里
maxnumId=data.pagination.next\u max\u id或此处的'document.myform.outputtext.value=document.myform.outputtext.value+data.pagination.next_max_id+'\n'``因为有太多可以为null的对象。使用console.log或alerts进行检查。快速提示:在
call ajax first time
中,在callApi4()之后添加一个半列,结果是:
call ajax first time