2015-05-01 50 views
0

我一直在寻找我的大脑,但我似乎无法将我的头围绕我找到的小帮助。AJAX触发器远程脚本,然后检查成功响应

我正在运行由另一个数据库中的数据提供的数据库。 csv传输由第三方服务器处理,该第三方服务器提供编译和传送数据的可执行“流”。

我有一个PHP脚本来处理请求(由于缺少'Access-Control-Allow-Origin'标头,不能通过Javascript直接完成)。但这很好。我可以触发流量。

虽然这不是问题。 我想要做什么:触发按钮的流动@onClick像这样的东西:

function trigger_func(flowID) { 
    $.ajax({ 
     url: './ajaxPHP_handler.php', 
     data: "flowid="+flowID, 
     dataType: 'json', 
     success: function(result) { 
      var jsonResult = jQuery.parseJSON(result); 
      console.log(jsonResult.runID); 
     } 
    }); 
} 

随着流ID,并将所得的runid我想回来看看像每秒左右。

function check_status(flowID, runID) { 
    $.ajax({ 
     url: './ajaxPHP_handler.php', 
     data: "flowid="+flowID+"&action=status&runId="+runID, 
     dataType: 'json', 
     success: function(result){...} 
    }); 
} 

这将返回流的状态/进度。 它会在status == null的状态下启动几秒钟,然后进入状态=='运行',最后状态=='成功'。 我已经得到了check_status()在trigger_func()的成功函数内的for循环中运行了15次,并且setTimeout也可以正常工作。 但我不能为我的生活弄清楚如何将这些东西链接在一起,让它检查,直到状态为'成功',然后停止检查,更新页面内容等...

我也拨弄有点像

trigger_func(id).done(function(result){ 
console.log(result); 
}); 

这样做也可以,但我仍然想不到我的方式进一步检查每一秒,直到'成功'。我想它归结为变量'状态'回到我的循环,所以我可以打破它。

也许有人易于理解的例子都知道网上什么地方...

+0

让我明白了,基本上你想使一个周期性的AJAX请求,直到成功状态返回,在这一点上,应立即停止。我对么? – qwattash

+0

是的。这是我想要做的 –

回答

1

你可以这样做:

function periodically_check_status_until_success(flowID, runID) { 
    setTimeout(function() { 
     $.ajax({ 
      url: './ajaxPHP_handler.php', 
      data: { flowid: flowID, action: status, runId: runID }, 
      dataType: 'json', 
      success: function(result){ 
       if (result != 'success') { 
        periodically_check_status_until_success(flowID, runID); 
       } 
      } 
     }); 
    }, 5000); // Five seconds 
} 

注意:您可以使用一个对象的data选项,而不是自己的字符串连接在一起。

+0

我认为我得到了这样的运行。 :) 天哪,这是如此容易....非常感谢在思考过程中的一脚:) 我将超时设置为1000,所以第一次运行check_status()时的延迟无关紧要。流量在头几秒内始终处于“未决”状态。 也感谢其他评论者。这真的是一个很棒的社区,当我需要查看想法时,它已经成为我的头号资源...... :) –

0

阿贾克斯异步,所以你必须通过一些第三方的变量通过这个管理

像初始化值为0

var _status = 0 

比你第一次打电话时改它吧1

function trigger_func(flowID) { 
$.ajax({ 
    url: './ajaxPHP_handler.php', 
    data: "flowid="+flowID, 
    dataType: 'json', 
    success: function(result) { 
     var jsonResult = jQuery.parseJSON(result); 
     console.log(jsonResult.runID); 
      check_status(flowID, runID); 
    } 
}); 
} 



function check_status(flowID, runID) { 
$.ajax({ 
    url: './ajaxPHP_handler.php', 
    data: "flowid="+flowID+"&action=status&runId="+runID, 
    dataType: 'json', 
    success: function(result){ 
     //at end status=='success'. 
      if(status=='success'){ 
       // end part 
      }else{// running 
       check_status(flowID, runID); 
      } 

      // clear timeout will stop that time interval after success 
    } 
}); 
} 
+0

切勿在ajax调用之外使用setTimeout。使用成功回调触发下一轮 – mplungjan

+0

肯定是正确的,但这就是为什么我建议,如果条件... –

+0

@mplungjan请看看更新后的答案.. –

0

所以还是叫它

var flowID, runID; 
function trigger_func(flowID) { 
    $.ajax({ 
    url: './ajaxPHP_handler.php', 
    data: "flowid="+flowID, 
    dataType: 'json', 
    success: function(result) { 
     var jsonResult = jQuery.parseJSON(result); 
     runID= jsonResult.runID; 
     check_status(); 
    } 
    }); 
} 

function check_status() { 
    $.ajax({ 
    url: './ajaxPHP_handler.php', 
    data: "flowid="+flowID+"&action=status&runId="+runID, 
    dataType: 'json', 
    success: function(result){ 
     if (result is not what you want) { 
     setTimeout(check_status,1000); 
     } 
    } 
    }); 
}