繁体   English   中英

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

[英]YII2 PJAX and javascript function call action from controller

我在下面的例子中实现了自动刷新时间。(只有间隔函数设置为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

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

调节器

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')]);

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM