YII2 PJAX和javascript函数调用来自控制器的动作

时间:2017-06-21 11:00:23

标签: javascript yii2 pjax

我在下面的例子中实现自动刷新时间。(只有间隔函数设置为1秒)

http://blog.neattutorials.com/examples/pjax/web/site/auto-refresh

我在我的VIEW上使用这个实现,我使用Inputform,我有麻烦,每次重新加载我从inputform丢失指针。

请问有什么方法,Javascript如何在不使用按钮的情况下从控制器调用函数,或者如何在不丢失指针的情况下重新加载部分页面?

我试过window.location.replace(“site / auto-refresh”);但它刷新了整个网站,而不是PJAX的一部分。

有我的代码:

<?php $form = ActiveForm::begin(['id' => 'my-form']); 

echo $form->field($model,'ipadress')->textInput((['id'=>'ipadress'])); $model->text = $text;                      
echo $form->field($model, 'text')->textArea(['rows' => '6','readonly' => 'true']);                    
echo Html::submitButton('Submit',['class'=>'btn btn-primary']) ?>
<?php ActiveForm::end(); ?>


<?php Pjax::begin(); ?>
<?= Html::a("Refresh", ['site/auto-refresh'], ['class' => 'btn btn-lg btn-primary', 'id' => 'refreshButton',]) ?>
<h1>Current time: <?= $time ?></h1>
<?php Pjax::end(); ?>


<?php
$script = <<< JS
$(document).ready(function() {
    setInterval(function(){ $("#refressetIntervalhButton").click(); }, 1000);
});
JS;
$this->registerJs($script);
?>   

更新: 仍然是相同的结果,当时间更新时,我从文本输入丢失指针(当我写作时)。 查看:

<?php $form = ActiveForm::begin(['id' => 'my-form']); ?>                     
 <?php echo $form->field($model,'ipadress')->textInput((['id'=>'ipadress'])); 
                        $model->text = $text; ?>                       
<?= $form->field($model, 'text')->textArea(['rows' => '6','readonly' => 'true']) ?>                     
<?= Html::submitButton('Submit',['class'=>'btn btn-primary']) ?>
<?php ActiveForm::end(); ?>
                <?php Pjax::begin(); ?>                
 <?= Html::a("Refresh", ['site/auto-refresh'], ['class' => 'btn btn-lg btn-primary', 'id' => 'refreshButton',]) ?>
 <h1>Current time: <?= $model->time ?></h1>
<?php Pjax::end(); ?>

控制器:

   $model = new \app\models\Tools;
$model->time = date('H:i:s');

            $uptime=shell_exec('uptime | awk \'{print $3}\';');


 return $this->render('auto-refresh', ['uptime' => $uptime, 'text' => $ip,'model' => $model]

谢谢 MK

1 个答案:

答案 0 :(得分:0)

请对两者使用一个控制器操作,并在模型中添加时间作为公共属性。

<强>控制器

public function actionTest()
{   
    $model = new Test();
    $model->time = date('H:i:s');
    return $this->render('TestView', ['model' =>$model]);
}

查看

<?php Pjax::begin(); ?>
 <?= Html::a("Refresh", ['site/test'], ['class' => 'btn btn-lg btn-primary', 'id' => 'refreshButton',]) ?>
 <h1>Current time: <?= $model->time ?></h1>
<?php Pjax::end(); ?>

或者您不希望时间作为您的控制器返回的公共财产,如下所示

return $this->render('TestView', ['model' => $model,'time'=>date('H:i:s')]);

直接在视图中使用时间变量。