在while循环中使用jQuery AJAX请求

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

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调用同步,它也不会阻止循环继续。 在done函数中放置console.log显示循环运行大约200次,直到我的服务器给出响应。

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

 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); } 

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

这对我来说很有用。 我希望它对你也有用。

  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'); }