2014-01-10 119 views
0

我想在我的yii项目中的APIController里面重复调用一个javascript函数。如何在yii控制器动作中使用Javascript/jQuery代码?

public function actionMytimer() { 
    Yii::app()->clientScript->registerCoreScript('jquery'); 
    Yii::app()->clientScript->registerCoreScript('jquery.ui'); 
    $hello = setInterval(test,1000); 
    function test(){ 
     echo 'hellooo interval'; 
    } 
} 

它非常有必要对我来说,在一个特定的时间运行“测试”的方法interval.Is这可能吗?如果没有,那么任何方式做到这一点?请help.Thanks在advnc。 这是当前的警告消息:

Fatal error: Call to undefined function setInterval() in /Library/WebServer/Documents/MediaPult/protected/controllers/APIController.php on line 449 
+3

你需要输出整个JavaScript代码。你不能在你的PHP控制器中运行它。尝试让它在纯HTML页面或jsfiddle.net中工作,然后从应用程序输出代码。 [这里有例子](http://stackoverflow.com/questions/12796021/how-to-use-jquery-with-the-yii-framework) –

+0

如果你想在控制器中运行一些方法,你需要使用[Yii控制台命令](http://www.yiiframework.com/doc/api/1.1/CConsoleCommand) –

+0

@TorinFinnemann:谢谢man.It工作:)) – Ajit

回答

1

如果你能更清楚地说明问题,它会更容易为人们提供了一个很好的解决方案。

据我所知,你希望能够在服务器端重复执行一个方法。为此,您应输出执行此操作的JavaScript代码。它会是这样的:

<script> 
setInterval(function(){ 
    $.get(<?= Yii::app()->request->baseUrl ?>/actionName"); 
}, 1000); 
</script> 
+0

你说得对。我希望能够在服务器端重复执行一个方法。但是,我可以在控制器操作中调用此方法吗?不是从一个角度来看。 – Ajit

+0

JavaScript驻留在客户端(浏览器)。 PHP在服务器端。因此,要执行JavaScript代码,您需要想象会发生的交互。 若要简单测试此操作,您可以在操作中执行回显“”。回声的输出将被发送到客户端。您可以通过转到“查看源代码”来检查发送给客户端的内容。然后,JavaScript代码将在客户端开始执行,向您的操作发送请求。 –

+0

Thanx的解释:) – Ajit

0

你不能从php代码中执行JavaScript函数就像那样。你可以尝试这样的:

function actionTest(){ 
    $cs = Yii::app()->clientScript; 
    $cs->registerScript('my_script', 'setInterval(test,1000);', CClientScript::POS_READY); 
    $this->render('any_view'); 
} 
+0

在'$ this-> render('any_view')中遇到麻烦了''我不知道如何传递一个视图名称。因为我想从一个动作中运行它。 – Ajit