我正面临着PJAX的问题。通过Pjax提交ActiveForm时,操作正在执行两次。 一个是流产,另一个是成功。 同时,由于前者正在插入和中止,因此在数据库中插入了2个新模型。
我的控制器代码是
public function actionCreate()
{
$model = new Products();
if ($model->load(Yii::$app->request->post()) && $model->save()) {
return "Success";
} else {
return $this->renderAjax('_form', [
'model' => $model,
]);
}
}
我的_form.php是
<?php
$this->registerJs('
$.pjax.defaults.timeout = 5000;
$("#product-form-pjax").on("pjax:success", function(data, status, xhr, options) {
if(options.responseText == "Success"){
$.pjax.reload({container: "#pjax-gridview", timeout: 2000});
$("#activity-modal").modal("hide");
}
});
');
?>
<div class="products-form">
<?php Pjax::begin(['id' => 'product-form-pjax', 'enablePushState' => FALSE]) ?>
<?php $form = ActiveForm::begin([
'id' => 'crud-model-form',
'action' => ['product/create'],
'options' => [
'data-pjax' => true,
]
]);
?>
<?= $form->field($model, 'name') ?>
<?= $form->field($model, 'image') ?>
<?= $form->field($model, 'brand')->dropDownList(ArrayHelper::map(Brands::find()->all(),'id','name')) ?>
<?= $form->field($model, 'category')->dropDownList(ArrayHelper::map(Categories::find()->all(),'id','name'),['select' => ''])?>
<?= $form->field($model, 'lot') ?>
<?= $form->field($model, 'prize') ?>
<?= $form->field($model, 'condition') ?>
<?= $form->field($model, 'extra_condition') ?>
<div class="form-group">
<?= Html::submitButton($model->isNewRecord ? 'Create' : 'Update', ['class' => $model->isNewRecord ? 'btn btn-success' : 'btn btn-primary']) ?>
</div>
<?php ActiveForm::end(); ?>
<?php Pjax::end() ?>
</div>
我是通过在GridView上启用Pjax的bootstrap模型创建此模型的 那么为什么我的行动被中止然后执行。 我已经更改了PJAX超时选项
答案 0 :(得分:1)
我对此并不是100%肯定,因为我需要直接测试您的代码以确保其有效。但我认为timestamp_micros INTEGER The timestamp (in microseconds) at which this
event was logged.
previous_timestamp_micros INTEGER The timestamp (in microseconds) at which this
event was previously logged.
事件会被触发两次。我记得有一段时间回顾它,看起来成功事件的目的是两次射击。
当我尝试做与您正在做的事情类似的事情时,我使用pjax:success
代替pjax:end
。所以你可能想尝试一下,看看它是否有帮助。
此外,确保在文档准备好后调用javascript可能会有所帮助。因此,如下更新脚本也可能有所帮助。您可以在Yii2文档http://www.yiiframework.com/doc-2.0/guide-output-client-scripts.html
中了解有关自定义脚本添加位置的详细信息pjax:success
答案 1 :(得分:0)
我有这个问题,这只是一个超时问题。 Pjax的默认超时时间太短。