2013-05-07 229 views
1

我想从Ajax请求调用PHP函数。这个PHP函数将花费2到3分钟以上。执行并且用户可能不想等待2分钟。所以为此,我打算做一个Ajax调用并重定向到另一个页面,以便用户可以接受另一个请求。直到我做了 -使用PHP调用PHP函数在后端调用PHP函数

new Ajax.Request(reloadurl, { 
method: 'POST', 
data: $('edit_form').serialize(), 
parameters: $('edit_form').serialize(true)     
    onComplete: function(transport) { 
     //alert(transport.responseText); 
     window.location = backurl; 
    }, 
    onCreate : function() {  
     alert('dsdsdsds'); 
     window.location = backurl;       
    }, 
    onFailure: function() { 
     alert('Something went wrong...');} 
    }); 

,但它不是工作..请帮我OUT-推荐我的方式让我可以调用同时

+1

上的会话操作“它不工作” ......请告诉我们更多!你会得到JS错误?你看到警报吗? – Alarid 2013-05-07 13:59:55

+1

如果您在Firebug/chrome开发人员工具中使用网络选项卡,它是否会显示新的呼叫? – Deadron 2013-05-07 14:00:46

+0

没有得到任何Js错误。它不会在onCreate上重定向并加载页面直到执行函数。执行之后,它重定向到“backurl” – Pravin 2013-05-07 14:02:55

回答

4

另一个Ajax请求要做到这一点,最好的办法是这样的:

<?php 

exec('/usr/bin/php /Path/to/script.php {$param1} {$param2} > /dev/null 2>/dev/null &'); 

?> 

然后在script.php的,你可以得到的参数是这样的:

print_r($argv); //print all parameters 
echo $argv[0]; //first parameter 

这将作为一个单独的线程运行php脚本,而不需要用户等待输出。

我倾向于更新文件或数据库以跟踪脚本的运行方式。

+0

Ya!我知道,但我不想调用exec函数或Cron Job。因为它的服务器设置和客户端不想这样做..是否有另一种方法来使用Ajax做到这一点? – Pravin 2013-05-07 14:06:46

+0

然后你上面的代码将等待脚本执行,这是头数据将被发送回你的JS。 – nick 2013-05-07 14:09:08

+0

好的。你能告诉我关于exce函数的更多信息吗?我的意思是,我在process.php文件中调用了process()函数。我通过POST方法将所有数据提交给process.php文件到Process()函数。那么我在哪里编写exec调用?请帮助我.... – Pravin 2013-05-07 14:17:02

0

您的方法可行,但如果您使用会话,只要您不再写信给它,您应该手动关闭session_write_close()

...会话数据被锁定,以防止并发只写脚本可以在任何时候