在while循环中使用jQuery AJAX请求

时间:2014-01-23 04:52:55

标签: javascript jquery ajax

以下代码将要求用户输入其名称,将其发送到处理脚本(保存到数据库,验证等)并返回响应:

var invalid = true;
while (invalid) {
    var name = prompt("Enter your name");
    $.ajax({
        type: "POST",
        url: "save.php",
        data: {
            "name": name
        }
    }).done(function(e) {
        //in this example, save.php returns "invalid" if the input did not pass validation
        invalid = e === "invalid";
    });
}

你可以看到我想要的一般想法,但问题是:即使我使AJAX调用同步,它也不会阻止循环继续。在console.log函数中放置done会显示循环运行大约200次,直到我的服务器给出响应。

服务器对用户的输入进行了大量的计算 - 我只是在这里使用名称作为示例。这不能在客户端进行。我如何实现这个简单的,初学者的设计模式,实质上是在提醒我C#中的多线程噩梦?

3 个答案:

答案 0 :(得分:2)

而不是循环,只需从done()代码重新触发输入。您可能想要命名此函数,以便它可以引用自身。

答案 1 :(得分:2)

function validate(e)
{
    if(e === "invalid")
        setTimeout(submitName, 0);
}

function submitName()
{
    var name = prompt("Enter your name");
    $.ajax({
        type: "POST",
        url: "save.php",
        data: {
            "name": name
        }
    }).done(validate);
}

答案 2 :(得分:0)

这对我来说非常有用。我希望它也适合你。

        var invalid = true;
        while (invalid) {
            var name = prompt("Enter your name");
            console.log(Date()+' Start Loop');
            $.ajax({
                 type: 'POST',
                 data: {'name': name},
                 async: false,
                 url: yourURL
            }).done(function(e) {
                //in this example, save.php returns "invalid" if the input did not pass validation
                console.log(Date()+' Done()');
                invalid = (e === "invalid");
            });
            console.log(Date()+' End Loop');
        }