Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/232.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Yii2:使用Pjax更新网格视图_Php_Gridview_Yii2_Pjax - Fatal编程技术网

Php Yii2:使用Pjax更新网格视图

Php Yii2:使用Pjax更新网格视图,php,gridview,yii2,pjax,Php,Gridview,Yii2,Pjax,跟随这个维基 我曾尝试在不重新加载页面的情况下使用gridview在Ajax上进行更新,但未能成功 my\u form.php的代码 <?php $this->registerJs( '$("document").ready(function(){ $("#new_medicine").on("pjax:end", function() { $.pjax.reload({container:"#medicine"}); //Relo

跟随这个维基

我曾尝试在不重新加载页面的情况下使用gridview在Ajax上进行更新,但未能成功

my\u form.php的代码

<?php

$this->registerJs(
   '$("document").ready(function(){ 
        $("#new_medicine").on("pjax:end", function() {
            $.pjax.reload({container:"#medicine"});  //Reload GridView
        });
    });'
);
?>


<?php

use yii\helpers\Html;
use yii\widgets\ActiveForm;
use kartik\grid\GridView;
//use yii\grid\Gridview;
use yii\data\ActiveDataProvider;

/* @var $this yii\web\View */
/* @var $model app\models\Medicine */
/* @var $form yii\widgets\ActiveForm */
?>
<!-- <div class="row">
    <div class="col-lg-6 col-lg-offset-3"> -->
<div class="medicine-form">
    <?php yii\widgets\Pjax::begin(['id' => 'new_medicine']) ?>

     <?php $form = ActiveForm::begin(['options' => ['data-pjax' => true ]]); ?>

    <?= $form->field($model, 'medicine_id')->textInput(['maxlength' => 10]) ?>

    <?= $form->field($model, 'medicine_name')->textInput(['maxlength' => 50]) ?>

    <div class="form-group">
        <?= Html::submitButton($model->isNewRecord ? 'Create' : 'Update', ['class' => $model->isNewRecord ? 'btn btn-success' : 'btn btn-primary']) ?>
        <?= Html::submitButton($model->isNewRecord ? 'Save & New' : '',$option=['class' => $model->isNewRecord ? 'btn btn-success' : 'btn btn-primary','name'=>'save_and_new']) ?>
    </div>

    <?php ActiveForm::end(); ?>
    <?php yii\widgets\Pjax::end() ?>

</div>
<?php

use yii\helpers\Html;
use yii\grid\GridView;

/* @var $this yii\web\View */
/* @var $searchModel app\models\MedicineSearch */
/* @var $dataProvider yii\data\ActiveDataProvider */

$this->title = 'Medicines';
$this->params['breadcrumbs'][] = $this->title;
?>
<div class="medicine-index">

    <h1><?= Html::encode($this->title) ?></h1>
    <?php // echo $this->render('_search', ['model' => $searchModel]); ?>

    <p>
        <?= Html::a('Create Medicine', ['create'], ['class' => 'btn btn-success']) ?>
    </p>
<?php \yii\widgets\Pjax::begin(['id' => 'medicine']); ?>
    <?= GridView::widget([
        'dataProvider' => $dataProvider,
        'filterModel' => $searchModel,
        'columns' => [
            ['class' => 'yii\grid\SerialColumn'],

            'id',
            'medicine_id',
            'medicine_name',

            ['class' => 'yii\grid\ActionColumn'],
        ],
    ]); ?>
<?php \yii\widgets\Pjax::end(); ?>
</div>
index.php中的代码

<?php

$this->registerJs(
   '$("document").ready(function(){ 
        $("#new_medicine").on("pjax:end", function() {
            $.pjax.reload({container:"#medicine"});  //Reload GridView
        });
    });'
);
?>


<?php

use yii\helpers\Html;
use yii\widgets\ActiveForm;
use kartik\grid\GridView;
//use yii\grid\Gridview;
use yii\data\ActiveDataProvider;

/* @var $this yii\web\View */
/* @var $model app\models\Medicine */
/* @var $form yii\widgets\ActiveForm */
?>
<!-- <div class="row">
    <div class="col-lg-6 col-lg-offset-3"> -->
<div class="medicine-form">
    <?php yii\widgets\Pjax::begin(['id' => 'new_medicine']) ?>

     <?php $form = ActiveForm::begin(['options' => ['data-pjax' => true ]]); ?>

    <?= $form->field($model, 'medicine_id')->textInput(['maxlength' => 10]) ?>

    <?= $form->field($model, 'medicine_name')->textInput(['maxlength' => 50]) ?>

    <div class="form-group">
        <?= Html::submitButton($model->isNewRecord ? 'Create' : 'Update', ['class' => $model->isNewRecord ? 'btn btn-success' : 'btn btn-primary']) ?>
        <?= Html::submitButton($model->isNewRecord ? 'Save & New' : '',$option=['class' => $model->isNewRecord ? 'btn btn-success' : 'btn btn-primary','name'=>'save_and_new']) ?>
    </div>

    <?php ActiveForm::end(); ?>
    <?php yii\widgets\Pjax::end() ?>

</div>
<?php

use yii\helpers\Html;
use yii\grid\GridView;

/* @var $this yii\web\View */
/* @var $searchModel app\models\MedicineSearch */
/* @var $dataProvider yii\data\ActiveDataProvider */

$this->title = 'Medicines';
$this->params['breadcrumbs'][] = $this->title;
?>
<div class="medicine-index">

    <h1><?= Html::encode($this->title) ?></h1>
    <?php // echo $this->render('_search', ['model' => $searchModel]); ?>

    <p>
        <?= Html::a('Create Medicine', ['create'], ['class' => 'btn btn-success']) ?>
    </p>
<?php \yii\widgets\Pjax::begin(['id' => 'medicine']); ?>
    <?= GridView::widget([
        'dataProvider' => $dataProvider,
        'filterModel' => $searchModel,
        'columns' => [
            ['class' => 'yii\grid\SerialColumn'],

            'id',
            'medicine_id',
            'medicine_name',

            ['class' => 'yii\grid\ActionColumn'],
        ],
    ]); ?>
<?php \yii\widgets\Pjax::end(); ?>
</div>


我想我已经非常仔细地遵循了说明,但是我肯定遗漏了一些东西,因为网格视图没有显示未重新加载页面而添加的新记录

任何帮助都将不胜感激。
谢谢。

我找不到合适的解决方案来使用pjax更新网格视图小部件。 我通过使用网格视图页面的自动刷新方法解决了这个问题。我明白这不是最好的解决方案,我仍在寻找合适的解决方案

我使用的方法如下:

<script>
function autoRefresh()
{
   window.location.reload();
}

setInterval('autoRefresh()', 60000); // this will reload page after every 1 minute.
</script>

函数autoRefresh()
{
window.location.reload();
}
setInterval('autoRefresh()',60000);//这将在每1分钟后重新加载页面。

试着解释如何作为一个小部件来做;这是一种通用解决方案,因此如果出现问题,请与我联系:

控制器(@your alias/controllers/yourController):

widgets(@your alias/widgets/)[表单,视图]:

_表格:

use yii\helpers\Html;
use yii\widgets\ActiveForm;
use yii\widgets\Pjax;

/**
 * @var yii\web\View $this
 * @var yourModule/models/YourModel $model
 * @var yii\widgets\ActiveForm $form
 */
?>
<?php
$js = <<<JS
// get the form id and set the event
$('form#{$model->formName()}').on('beforeSubmit', function(e) {
   var \$form = $(this);
   // do whatever here, see the parameter \$form? is a jQuery Element to your form
    console.log(\$form);
    console.log("MODEL CODE = " + $("#yourmodel-code").val());
}).on('submit', function(e){
    e.preventDefault();
});
JS;
//$this->registerJs($js);
$this->registerJs(
   '$("#new-your-model").on("pjax:end", function() {
        commonLib.divAction("#div_new_model", "hide"); //hide form
        $.pjax.reload({container:"#models"});  //Reload GridView
    });', \yii\web\View::POS_READY
);
?>

<div class="model-form">

    <?php Pjax::begin(['id' => 'new-model', 'timeout' => false, 'enablePushState' => false]) ?>
        <?php $form = ActiveForm::begin([
            'id' => $model->formName(),
            //'method' => 'post',
            'action' => ['/module/controller/manage?param='.$model->code],
            'options' => ['data-pjax' => true ],
            //'layout' => 'default',
            ]); ?>

        <?= $form->field($model, 'code')->textInput(['maxlength' => 255]) ?>

        ...


        <div class="form-group">
            <?= Html::submitButton($model->isNewRecord ? 'Create' : 'Update', ['class' => $model->isNewRecord ? 'btn btn-success' : 'btn btn-primary']) ?>
        </div>

        <?php ActiveForm::end(); ?>
    <?php yii\widgets\Pjax::end() ?>

</div>

你要找的是

<script type="text/javascript">
$.pjax.defaults.timeout = false;
</script>

$.pjax.defaults.timeout=false;
默认的pjax超时设置没有给页面时间做任何事情,因此它会重新加载


$.pjax.reload('my grid pjax',{timeout:false})

要使用pjax在不重新加载页面的情况下更新
GridView
表格,请执行以下操作:

use yii\grid\GridView;
use yii\widgets\Pjax;

Pjax::begin(['id' => 'todaysactivity', 'timeout' => false, 'enablePushState' => false])
按如下方式使用jQuery/JavaScript:

var url = baseurl + '/activity/logging'; // url where the gridview table need to update
$.pjax.reload({container: "#todaysactivity", url: url}); // refresh the grid

你确定ajax不起作用吗?我的意思是你检查了firebug没有看到任何ajax请求吗?嗨,亲爱的Ali,是的,它不工作了。与wiki的唯一区别在于,我没有在
index.php页面
上呈现表单。我想从
\u form.php
更新网格视图。如果我在index.php上呈现表单,那么它就可以工作,但这并不能解决我的目的。我在\u form.php本身中添加数据,并在其他浏览器选项卡中保持index.php页面的打开状态。我想在索引页面(网格视图)页面中查看数据更新。这是不可能的吗?嗨,阿里,我想实现的真正目的是我有一个药品申请表,在药店下有一个网格视图,其中包含相同的数据。药店将在不刷新页面的情况下知道有新的药品请求。
use yii\grid\GridView;
use yii\widgets\Pjax;

Pjax::begin(['id' => 'todaysactivity', 'timeout' => false, 'enablePushState' => false])
var url = baseurl + '/activity/logging'; // url where the gridview table need to update
$.pjax.reload({container: "#todaysactivity", url: url}); // refresh the grid