【问题标题】:Looping jquery ajax based on ajax response.. with setTimeout基于 ajax 响应的循环 jquery ajax .. 使用 setTimeout
【发布时间】:2011-08-21 07:32:36
【问题描述】:

所以我正在尝试使用单个 jquery 函数,该函数使用 ajax 与单个 php 页面对话,但调用进程的不同步骤。如果流程步骤成功完成,它将返回下一步,以便我可以再次循环该函数......直到我返回“完成”或“失败”。我想对过程的某些步骤进行计时,以解决延迟的服务器端处理。我在函数内部使用 setTimeout 时遇到问题。我有以下内容:

    function ProcessClient(InProcess){
    var dataString = 'inprocess='+InProcess;
    if(InProcess=='buildaccount'){dataString+='&vercode='+$('#vercode').val();}

    //append current step(status) to client here

    $.ajax({             
        type: "POST",             
        url: 'ajax/NewClient.php',            
        data: dataString, 
        success: function(data){
            if(data=='Fail'){
                alert(data);
            }else if(data=='Complete'){
                $('#Progress').append('<li>All done! Click <a href="/manage/">here</a> to head over to your administration page!</li>');
            }else{
                var Timer = 1000;
                if(data=='buildserveraccounts'){
                    Timer=10000;
                }

                $(function(){
                    setTimeout('ProcessClient('+data+')',Timer);
                })
            }
        }
    });     
}

我在这里做错了什么?截至目前......该功能甚至没有循环......我尝试了一些不同的东西,但永远无法让计时器工作。哦,我愿意接受更好的方法来完成我正在努力的想法......?

【问题讨论】:

    标签: php jquery ajax settimeout


    【解决方案1】:

    这段代码在几个方面是可疑的:

    $(function(){
        setTimeout('ProcessClient('+data+')',Timer);
    })
    

    第一件事是将一个函数传递给$(),它是$(docmument).ready(...) 的简写——例如,“当 DOM 准备好时调用我”钩子。此代码与 DOM 就绪无关。这在这里相对无害,因为如果 DOM 已经准备好,jQuery 会立即调用该函数,但充其量是不必要的。

    第二件事是您将字符串传递给setTimeout。几乎没有充分的理由这样做,它与使用 eval 相同(但有延迟),也几乎没有理由使用它。而是传入一个函数引用。

    所以:

    setTimeout(function() {
        ProcessClient(data);
    }, Timer);
    

    我预计它根本不起作用的原因是您传递给setTimeout 的字符串是ProcessClient(SomeDataTest) 而不是ProcessClient("SomeDataTest")(注意引号),因此当稍后评估该字符串时,它是语法错误,未执行。

    【讨论】:

    • 不错。我尝试了类似的方法,但我错过了 setTimeout 中的函数。谢谢。
    • 我使用的是“setTimeout('ProcessClient('+data+')',Timer);”
    • $Rob:很高兴有帮助。 :-) 我不太关注您的第二条评论,但它仍然存在我在上面答案末尾提到的主要问题,即在结果字符串中,数据字符串周围没有引号。
    猜你喜欢
    • 1970-01-01
    • 2014-02-26
    • 2012-03-03
    • 2013-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-20
    相关资源
    最近更新 更多