在控制器动作-YII中调用Javascript函数

时间:2015-06-22 10:05:32

标签: javascript jquery model-view-controller yii

我试图在控制器动作方法中调用Javascript函数,是否有任何正确的方法可以在控制器动作方法中的某些条件下调用setTimeout()

window.setTimeout(function() {  
    alert("test");
    $.ajax({
        type: "POST",
        url:    "'.$this->createUrl("/operator/createViopNode/").'",
        data: {
            id: '.$bc_id.',
            callid:"'.$num.'",
            taskid:'.$this->taskid.'
        },
        success: function(msg){
            var ifrm = document.getElementById("frame");
            ifrm = (ifrm.contentWindow) ? ifrm.contentWindow : (ifrm.contentDocument.document) ? ifrm.contentDocument.document : ifrm.contentDocument;
            ifrm.document.open();
            ifrm.document.write(msg);
            ifrm.document.close();
        },
        error: function (jqXHR, textStatus, errorThrown){
            alert("" + textStatus + ", " + errorThrown);
        }
    });     
}, parseInt('.$tps_call.'));

我需要在控制器动作方法里面写上面的js函数,怎么写呢?

2 个答案:

答案 0 :(得分:1)

Index.csHtml

function abc()
 {
   alert("called")
 }

现在使用Ajax Call函数

function ExecuteAjax(URL,Data,Success)
{
    try {
        $.ajax({
            type: "post",
            url: URL,
            data: Data,
            contentType: "json",
            success: function (data) { if (typeof Success == "function") { Success(data); } }
        })
    } catch (e) {
        alert(e.message)
    }
}

像这样调用ajax

 ExecuteAjax("/Home/FillColorDropDown", "", function (data) {
            eval(data.script);
        });

从控制器返回

      if(demo=="true")//put condition here whatever you want
       {
         string strscript="abc();";
       }
      protected JObject jobj = new JObject();
      jobj.Add("Script", strscript);
      return Json(jobj);

当控制器返回成功时执行js功能

答案 1 :(得分:0)

你应该注册你的javascript函数:

function actionTest(){
  $cs = Yii::app()->clientScript;
  $cs->registerScript('my_script', 'alert("Hi there!");', CClientScript::POS_READY);
  $this->render('any_view');
}

source