Yii2实现ActiveForm ajax提交


Posted in PHP onMay 26, 2017

做项目时总会碰到ajax提交的功能,特别是在做后台提交时,一般都会用模型自动生成,这个功能的使用会比较频繁,其实只要了解了流程,操作还是挺简单的,使用起来也方便。

表单部分

<?php $form = ActiveForm::begin([ 
  'action' => ['save'], //提交地址(*可省略*) 
  'method'=>'post',  //提交方法(*可省略默认POST*) 
  'id' => 'form-save', //设置ID属性 
  'options' => [ 
    'class' => 'form-horizontal', //设置class属性 
  ], 
  'enableAjaxValidation' => true, 
  'validationUrl' => 'validate-view', 
]); ?> 
 
<?php echo $form->field($model,'company_name', ['inputOptions' => ['placeholder'=>'请输入商家名称','class' => 'form-control'], 'template'=>'<label for="inputCompanyName" class="col-sm-1 control-label"><span class="text-red">*</span> 商家名称</label><div class="col-md-8">{input}</div><label class="col-sm-3" for="inputError">{error}</label>'])->textInput()?> 
 
<?=Html::submitButton('保存',['class'=>'btn btn-primary']); ?> 
 
<?php ActiveForm::end(); ?>

其中:'enableAjaxValidation' => true, 必须设置,告诉表单用ajax提交

控制器(controller)部分

控制器分两部分,一部分是效验表单的正确性,另外一部分是保存

1、效验部分

public function actionValidateView() 
{ 
  $model = new model(); 
  $request = \Yii::$app->getRequest(); 
  if ($request->isPost && $model->load($request->post())) { 
    \Yii::$app->response->format = Response::FORMAT_JSON; 
    return ActiveForm::validate($model); 
  } 
}

2、保存部分

public function actionSave() 
{ 
  \Yii::$app->response->format = Response::FORMAT_JSON; 
  $params = Yii::$app->request->post(); 
  $model = $this->findModel($params[id]); 
 
  if (Yii::$app->request->isPost && $model->load($params)) { 
    return ['success' => $model->save()]; 
  } 
  else{ 
    return ['code'=>'error']; 
  } 
}

Ajax提交from表单

$(function(){ 
$(document).on('beforeSubmit', 'form#form-save', function () { 
    var form = $(this); 
    //返回错误的表单信息 
    if (form.find('.has-error').length) 
    { 
      return false; 
    } 
    //表单提交 
    $.ajax({ 
      url  : form.attr('action'), 
      type  : 'post', 
      data  : form.serialize(), 
      success: function (response){ 
        if(response.success){ 
          alert('保存成功'); 
          window.location.reload(); 
        } 
      }, 
      error : function (){ 
        alert('系统错误'); 
        return false; 
      } 
    }); 
    return false; 
  }); 
});

特别注意本人用的是Yii2 adminlte框架后台,具体操作过程试项目而定,基本操作过程都一样。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
谈谈新手如何学习PHP
Dec 14 PHP
php 数组的合并、拆分、区别取值函数集
Feb 15 PHP
php学习笔记(三)操作符与控制结构
Aug 06 PHP
三个类概括PHP的五种设计模式
Sep 05 PHP
PHP中4个加速、缓存扩展的区别和选用建议
Mar 12 PHP
PHP实现删除非站内外部链接实例代码
Jun 17 PHP
php网页病毒清除类
Dec 08 PHP
PHP版单点登陆实现方案的实例
Nov 17 PHP
PHP中SQL查询语句的id=%d解释(推荐)
Dec 10 PHP
php中preg_replace正则替换用法分析【一次替换多个值】
Jan 17 PHP
Laravel框架使用Seeder实现自动填充数据功能
Jun 13 PHP
php进行md5加密简单实例方法
Sep 19 PHP
Yii2选项卡的简单使用
May 26 #PHP
PHP编程获取各个时间段具体时间的方法
May 26 #PHP
php实现自定义中奖项数和概率的抽奖函数示例
May 26 #PHP
PHP判断密码强度的方法详解
May 26 #PHP
thinkphp实现附件上传功能
May 26 #PHP
微信第三方登录(原生)demo【必看篇】
May 26 #PHP
php写一个函数,实现扫描并打印出自定目录下(含子目录)所有jpg文件名
May 26 #PHP
You might like
用PHP来写记数器(详细介绍)
2006/10/09 PHP
php无限分类且支持输出树状图的详细介绍
2013/06/19 PHP
php根据操作系统转换文件名大小写的方法
2014/02/24 PHP
php运行时动态创建函数的方法
2015/03/16 PHP
PHP的pcntl多进程用法实例
2015/03/19 PHP
全新Mac配置PHP开发环境教程
2016/02/03 PHP
JavaScript 三种创建对象的方法
2009/10/16 Javascript
JS按位非(~)运算符与~~运算符的理解分析
2011/07/31 Javascript
探讨JavaScript中声明全局变量三种方式的异同
2013/12/03 Javascript
用jquery模仿的a的title属性的例子
2014/10/22 Javascript
jQuery实现时尚漂亮的弹出式对话框实例
2015/08/07 Javascript
JS弹出对话框实现方法(三种方式)
2015/12/18 Javascript
jquery ajax双击div可直接修改div中的内容
2016/03/04 Javascript
通过Tabs方法基于easyUI+bootstrap制作工作站
2016/03/28 Javascript
js操作数据库实现注册和登陆的简单实例
2016/05/26 Javascript
详解Node.js开发中的express-session
2017/05/19 Javascript
vue兄弟组件传递数据的实例
2018/09/06 Javascript
详解async/await 异步应用的常用场景
2019/05/13 Javascript
JS实现可用滑块滑动的缓动图代码
2019/09/01 Javascript
详解ES6中class的实现原理
2020/10/03 Javascript
[44:21]Ti4 循环赛第四日 附加赛NEWBEE vs LGD
2014/07/13 DOTA
[02:14]2016国际邀请赛中国区预选赛Ehome晋级之路
2016/07/01 DOTA
[50:58]2018DOTA2亚洲邀请赛3月29日 小组赛A组OpTic VS Newbee
2018/03/30 DOTA
Python入门_浅谈字符串的分片与索引、字符串的方法
2017/05/16 Python
详细解读tornado协程(coroutine)原理
2018/01/15 Python
python opencv调用笔记本摄像头
2019/08/28 Python
Python银行系统实战源码
2019/10/25 Python
创建Shapefile文件并写入数据的例子
2019/11/26 Python
老生常谈CSS中的长度单位
2016/06/27 HTML / CSS
请写一个C函数,若处理器是Big_endian的,则返回0;若是Little_endian的,则返回1
2015/07/16 面试题
请用Python写一个获取用户输入数字,并根据数字大小输出不同信息的脚本
2014/05/20 面试题
2014最新版群众路线四风整改措施
2014/09/24 职场文书
小班上学期幼儿评语
2014/12/30 职场文书
导游词之杭州西湖
2019/09/19 职场文书
PostgreSQL将数据加载到buffer cache中操作方法
2021/04/16 PostgreSQL
微软团队与 NASA 科学家和惠普企业(HPE)的工程师合作
2022/04/21 数码科技