首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >递归方式的jQuery $.post() (循环)

递归方式的jQuery $.post() (循环)
EN

Stack Overflow用户
提问于 2011-04-12 12:14:56
回答 3查看 3.5K关注 0票数 0

我学习jQuery,但不理解这种情况:

在调试模式下运行此代码时,都运行良好。但是当正常运行此代码时,calback函数不会启动。为什么?在非调试模式下,我使用-> "Start“”-> "End 10“

浏览器:谷歌Chrome。

代码语言:javascript
运行
AI代码解释
复制
var nrPost = 10;

$("#buttnX").click(function() {
    alert("Start");     
    GoPosts();
    End();
}); 

function End() {
    alert('End ' + nrPost);
};

function GoPosts() {
    $.ajaxSetup({async:false});
    var url = "http://......";
    var data = { ... };
    $.post(url, data, Callback, 'json');
};

function Callback(response) {   
    if (response.error) {
        return;
    }

    nrPost--;

    if (nrPost > 0) [
        GoPosts();
    } else {
        return;
    }
};
EN

回答 3

Stack Overflow用户

发布于 2011-04-12 12:28:31

在代码中有一个额外的}。我对它做了一些修改,以使用jQuery,并将其放在jsfiddle上。

http://jsfiddle.net/rH8RV/19/

它应该发出警告:“开始”,然后“结束10",根据您编写代码的方式,这是正确的。你还在等什么吗?

票数 3
EN

Stack Overflow用户

发布于 2011-04-12 12:41:45

我不知道您计划如何处理递归实现,但如果仅此而已,您实际上可以这样做:

代码语言:javascript
运行
AI代码解释
复制
function startLoop(nrPost) {

    // No need to put this in a loop
    $.ajaxSetup({ async: false });

    for (var i = 0; i < nrPost; i++) {
        alert('Start ' + i);

        var url = 'http://......';
        var data = {};

        $.post(url, data, function (response) {
            if (response.error)
                return;

            alert('End ' + i);
        }, 'json');
    }
}

$('#buttnX').click(function () { startLoop(10) });

希望这能帮上忙!

票数 1
EN

Stack Overflow用户

发布于 2011-04-12 12:35:18

我想你是在期待这个展览:

  • "Start"
  • "End 0“

这不太可能适用于您的解决方案。

Ajax调用$.post(url, data, Callback, 'json');是异步的。这意味着,一旦$.post方法返回,请求将发送到您提供的URL。但是,在Callback收到答案之前,不会调用JQuery。立即发生的情况是,GoPosts终止,程序继续。它返回到代码的第5行,在单击处理程序中的匿名函数中。此时,End()被调用并警告"End 10“。

您可能希望将调用End放在Callback中,而不是:

代码语言:javascript
运行
AI代码解释
复制
function Callback(response)
{   
    if (response.error) 
    {
        return;
    }

    nrPost--;

    if(nrPost>0)
        GoPosts();
    else
    {
        End(); // You only want to end once you have made you nrPost calls to GoPost
        return;
    }
};
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5641080

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档