我在Yii2中有一个单页面应用程序
主页包含 1.包含对象列表的列+创建按钮 2.用于创建/更新表单的动态内容的列
我的问题是在加载(通过ajax)创建表单时,然后我通过AjaxSubmitButton发送数据,这很好(db更新)但不是用新的对象数据更改动态内容区域,而是重定向到视图部分形式。
如何让新响应进入与发送响应相同的div?
这是现在在#singleObjContainer
中加载的表单 <div class="course-form">
<?php
$form = yii\bootstrap\ActiveForm::begin();
?>
<span>
<h4 class='listTitle'>Add Course</h4>
</span>
<span class="form-group pull-right">
<?php
AjaxSubmitButton::begin([
'label' => 'Save',
'ajaxOptions' => [
'type'=>'POST',
'url'=> Url::toRoute(['course/create-form']),
'success' => new \yii\web\JsExpression('function(html)
{
$("#singleObjContainer").empty().append(html);
}'),
],
'options' => ['class' => 'btn btn-success', 'type' => 'submit'],
]);
AjaxSubmitButton::end();
?>
</span>
<hr class='myHr'>
<div>
<?php
echo $form->field($model, 'name')->textInput(['maxlength' => true]);
echo $form->field($model, 'description')->textarea(['rows' => '4']);
echo $form->field($model, 'img')->label(Html::img(Yii::getAlias('@uploadsUrl/').'courses/'.$model->img,['width' => '30%']),['encodeLabel' => false])->fileInput();
?>
</div>
<?php ActiveForm::end(); ?>
这是控制器动作:
public function actionCreateForm()
{
$model = new Course();
if ( $model->load(Yii::$app->request->post()))
{
// get the instance of the image
$image = UploadedFile::getInstance( $model, 'img');
// save image name to the model
$model->img = $image->baseName.".".$image->extension;
// go through validation rule and save
if( $model->save() )
{
// validation ok, save image in the file system
$image->saveAs( Yii::getAlias('@uploads/').'courses/'.$model->img);
// load the details view into the singleObj container
$courseStudents = $this->getCourseStudents($model['id']);
return $this->renderPartial('_viewForm', ['model' => $model, 'courseStudents' => $courseStudents]);
}
}
else
{
return $this->renderPartial('_createForm', ['model' => $model,]);
}
}
答案 0 :(得分:0)
如果您需要,您的结果将直接发送到ajax请求..只需返回..最终使用数组的json_encode。
return json_encode( $model);
这样你就可以获得一个json的答案,结构相当于你的$ model
在您的控制器中添加适当的操作
public function actionRefreshForm()
{
//your appllication code
$my_new_html_code ='<div>test new html code </div>;
return $my_new_html_code;
}
在您的ajaxOptions中调用相关操作
'ajaxOptions' => [
'type'=>'POST',
'url'=> Url::toRoute(['course/refresh-form']),
'success' => new \yii\web\JsExpression('function(html)
{
$("#singleObjContainer").empty().append(html);
}'),
],
答案 1 :(得分:0)
您可以使用yii\widgets\Pjax
。我想你会很容易的。您可以在本文中了解有关它的更多信息。 http://blog.neattutorials.com/yii2-pjax-tutorial