2014-01-19 79 views
0

我试图用PHP更新这么多行,我不得不使用ajax(因为执行时间太短而无法执行所有行)。所以我做了一个应该调用一个.php文件的代码,里面的代码更新了发布在mysql表中的ROW id。AJAX行动与cron-job?

我有一个代码

<html> 
<head> 
    <title>Cron job!</title> 
    <meta charset="UTF-8" /> 
    <script src="jquery.js"></script> 
</head> 

<html> 
<body> 

<div id="body"> 

</div> 

<script> 
    $(document).ready(function(){ 
     var array_items = <?=$table_info?>; 
     var updated_items = 0; 

     for(var i=0; i<array_items.length; i++){ 
      // pradedam kreipimąsi į kiekvieną rową jo updeitui su ajax 
      $.ajax({ 
       url: "ajax_cron.php", 
       type: 'POST', 
       dataType: 'json', 
       data: {update_id : array_items[i]['ids']}, 
       success: function (data) { 
        // kreipimąsis pavyko 
        if(data.updated_id){ 
         updated_items += 1; 
        } 
        $("#body").html(updated_items + " iš " +array_items.length + " updeitinta sėkmingai");     
       }, error: function(e){ 
        console.log(e.message); 
       } 
      });    
     } 
    }); 
</script> 

</body> 
</html> 

和它的作品,当我打开网址与浏览器,但是当我做出这个脚本cron作业通话 - 阿贾克斯不工作。所以如何使它工作?

+0

我没有看到通过ajax发布数据将解决问题,服务器仍然必须执行并在最大执行时间内返回响应。我会建议增加所需的时间在php ini – andrew

+0

我通过ajax发送只有一个请求,并使用循环多次。 –

回答

0

Ajax是一种客户端技术,因此它需要客户端(浏览器)能够执行脚本,最重要的是可以通过Javascript读取DOM元素。

另一方面,Cron作业在CLI上运行,该脚本在脚本运行时不知道有关DOM的任何内容。

换句话说,你正在尝试做的事情对于我们现有的网络技术来说是不可能的。但是,您始终可以在cronjob上运行服务器端脚本,但可以在客户端脚本上运行,不行。

+0

是否可以安装网络浏览器到VPS(例如mozilla)并执行cron到'/ path/to/browser http:// mysite/mywebpage.php'? –

+0

是的,如果您运行浏览器可执行文件并调用URL,代码将在浏览器环境中运行。但是使用cronjob执行PHP代码或服务器端代码总是更好。如果您在加载浏览器时知道PHP脚本正在做什么,为什么不将PHP代码添加到cronjab中。 –