每次执行后暂停循环

时间:2011-08-19 21:09:17

标签: javascript jquery asp.net-ajax settimeout

我有一个页面,其中我使用ajax插入记录...现在在javascript我使用每个循环来循环html表并在数据库中插入行。但是发生是因为foreach循环执行得很快,有时候,不插入一些记录..所以我想让循环睡眠一段时间,一旦它先执行,然后......

有没有办法暂停for循环..我使用setTImeout ..但它只是第一次延迟而不是连续次... 这是我的代码。

     function AddTopStories() {
            $("#tBodySecond tr").each(function (index) {
                $.ajax({
                    type: "POST",
                    url: "AjaxMethods.aspx/AddTopStoriesPosition",
                    data: "{'articleID':'" + $("td:nth-child(1)", this).text() + "','siteID':1}",
                    dataType: "json",
                    contentType: "application/json",
                    success: function (data) {
                        window.setTimeout(showSuccessToast(data.d), 3000);
                    },
                    error: function (data) {
                        window.setTimeout(showSuccessToast("Error:" + data.reponseText), 3000);
                    }
                });
            });
        }

Please help me to resolve this issue... its utmost important.
*************************************UPDATED CODE AS PER THE CHANGES BY jfriend00*********

function AddTopStories() {
    var stories = $("#tBodySecond tr");
    var storyIndex = 0;

    function addNext() {
        if (storyIndex > stories.length) return;   // done, no more to get
        var item = stories.get(storyIndex++);
        alert($("td:nth-child(1)", item).text());
        addNext();
    }
}

这只是没有做任何事......不警惕......


2 个答案:

答案 0 :(得分:1)

我建议你把它分解为一个能完成一个故事的函数然后从第一个成功处理程序中启动下一个故事,如下所示:

function AddTopStories() {
    var stories = $("#tBodySecond tr");
    var storyIndex = 0;

    function addNext() {
        if (storyIndex >= stories.length) return;   // done, no more to get
        var item = stories.get(storyIndex++);
        $.ajax({
            type: "POST",
            url: "AjaxMethods.aspx/AddTopStoriesPosition",
            data: "{'articleID':'" + $("td:nth-child(1)", item).text() + "','siteID':1}",
            dataType: "json",
            contentType: "application/json",
            success: function (data) {
                addNext();          // upon success, do the next story
                showSuccessToast(data.d);
            },
            error: function (data) {
                showSuccessToast("Error:" + data.reponseText);
            }
        });
    }
    addNext();
}

答案 1 :(得分:0)

很丑,但你可以使用本网站上的一种方法假冒javascript'sleep':

http://www.devcheater.com/