2013-07-23 54 views
0

我想用jQuery编写一个递归函数来调用发送电子邮件的php文件。电子邮件服务器一次发送10批次的电子邮件,我希望JS继续发送GET,直到data.Finished == true。jQuery递归获得等待结果

我的代码如下:

function emailDespatchNotification() { 
    $.get('email.php', function(event) { 
    if (event.action.status == 'OK') { 
     if (event.data.Finished != true) { 
     emailDespatchNotification(); 
     } 
    } 
    }); 
} 

的JSON结果如下:

{ 
"log": {"SQL":{"0":"SELECT ...","1":"INSERT INTO ..."},"0":"Cache cleared","Page":"email.php","Script_Time":3.4495}, 
"data": {"Finished":false}, 
"action": {"status":"OK"}, 
"readable": {} 
} 

emailDespatchNotification()被称为首次代码的行为,因为我希望它发送一个GET到服务器,但是当返回结果(包含data.Finished = false)时,JS不断发送GET请求到服务器,直到我停止它或浏览器报告错误。

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

+0

@Joe他的代码是在它应该是ajax回调,我不认为这是问题。 –

+0

您是否验证了ajax调用的结果以确保它符合您的期望?在调用'emailDespatchNotification();'的行上放置一个断点可能会有帮助,并检查事件对象。 –

+0

我已验证ajax结果并通过JSONLint运行它,我已将示例结果添加到我的问题中。 – TheBeest

回答

0

我相信我已经通过在GET函数中添加了一个种子来解决了这个问题,虽然Cache-Control被设置为no-store,no-cache它缓存了结果。

的适应代码如下:

var seed = new Date()/1; 
$.get('beta/email.php', {seed:seed}, function(event) { 

这样,我保证我得到的页面的真人版,我的代码执行罚款。

@Jason P感谢您的帮助!