Javascript jQuery递归获取等待结果

Javascript jQuery递归获取等待结果,javascript,jquery,recursion,get,Javascript,Jquery,Recursion,Get,我正在尝试使用jQuery编写一个递归函数来调用发送电子邮件的php文件。电子邮件服务器一次发送10封电子邮件,我希望JS继续发出GET,直到data.Finished==true 我的代码如下: function emailDespatchNotification() { $.get('email.php', function(event) { if (event.action.status == 'OK') { if (event.data.Finished != t

我正在尝试使用jQuery编写一个递归函数来调用发送电子邮件的php文件。电子邮件服务器一次发送10封电子邮件,我希望JS继续发出GET,直到data.Finished==true

我的代码如下:

function emailDespatchNotification() {
  $.get('email.php', function(event) {
    if (event.action.status == 'OK') {
      if (event.data.Finished != true) {
        emailDespatchNotification();
      }
    }
  });
}
{
"log": {"SQL":{"0":"SELECT ...","1":"INSERT INTO ..."},"0":"Cache cleared","Page":"email.php","Script_Time":3.4495},
"data": {"Finished":false},
"action": {"status":"OK"},
"readable": {}
}
var seed = new Date() / 1;
$.get('beta/email.php', {seed:seed}, function(event) {
JSON结果如下所示:

function emailDespatchNotification() {
  $.get('email.php', function(event) {
    if (event.action.status == 'OK') {
      if (event.data.Finished != true) {
        emailDespatchNotification();
      }
    }
  });
}
{
"log": {"SQL":{"0":"SELECT ...","1":"INSERT INTO ..."},"0":"Cache cleared","Page":"email.php","Script_Time":3.4495},
"data": {"Finished":false},
"action": {"status":"OK"},
"readable": {}
}
var seed = new Date() / 1;
$.get('beta/email.php', {seed:seed}, function(event) {
当第一次调用
EmailDispatchNotification()
时,代码的行为就像我希望它向服务器发送一个GET一样,但是当返回结果(包含data.Finished=false)时,JS会持续向服务器发送GET请求,直到我停止它或浏览器报告错误为止


我不明白为什么要连续调用
EmailDispatchNotification()
,因为只有在GET返回值后才应该调用它。我尝试将整个GET嵌套到一个命名函数中,并调用该函数而不是
EmailDispatchNotification()
,但没有效果。在使用列表之前,我已经解决了这类问题,但我不知道需要调用服务器多少次,因此列表不合适。我正在使用jQuery 1.8.3并使用Firebug进行调试。

我相信我已经通过在GET函数中添加种子解决了这个问题,尽管缓存控制设置为“无存储,无缓存”,但它正在缓存结果

修改后的代码如下所示:

function emailDespatchNotification() {
  $.get('email.php', function(event) {
    if (event.action.status == 'OK') {
      if (event.data.Finished != true) {
        emailDespatchNotification();
      }
    }
  });
}
{
"log": {"SQL":{"0":"SELECT ...","1":"INSERT INTO ..."},"0":"Cache cleared","Page":"email.php","Script_Time":3.4495},
"data": {"Finished":false},
"action": {"status":"OK"},
"readable": {}
}
var seed = new Date() / 1;
$.get('beta/email.php', {seed:seed}, function(event) {
通过这种方式,我可以确保获得页面的实时版本,并且代码执行良好


@谢谢你的帮助

@Joe他的代码在ajax回调中应该是这样的,我认为这不是问题所在。您是否验证了ajax调用的结果以确保它符合您的预期?在调用
EmailDispatchNotification()的行上放置断点可能会有所帮助并检查您的事件对象。我已经验证了ajax结果并通过JSONLint运行它,我已经在问题中添加了一个示例结果。看起来您的逻辑对我来说没问题:。请求是否很快返回?
Finished
是否设置为true?每个请求需要不到4秒的时间才能完成,执行时间在JSON中报告。但是一旦第一个请求完成并且
EmailDispatchNotification()时,它会一直被调用,尽管php需要4秒来执行JS,但不会等待。一旦所有电子邮件发送完毕,Finished将设置为true,但我有大约1000条记录要覆盖,我一次只做25条。