以下代码将要求用户输入其名称,将其发送到处理脚本(保存到数据库,验证等)并返回响应:
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#中的多线程噩梦?
答案 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');
}