首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何让ajax更新和ajax验证在Yii2中协同工作?

如何让ajax更新和ajax验证在Yii2中协同工作?
EN

Stack Overflow用户
提问于 2021-10-10 01:49:40
回答 1查看 29关注 0票数 0

我有一个带有GridView的页面,我希望可以在不重新加载页面的情况下编辑数据。GridView结构是基本的。当我单击该按钮时,我将表单上传到模式窗口,然后跟踪表单提交事件。数据会正确更改,但ajax验证不起作用。

ActiveForm

代码语言:javascript
运行
AI代码解释
复制
    <?php $form = ActiveForm::begin([
        'id' => 'update-form',
        'action' => Url::to(['/product/ajax-update', 'wbId' => $model->wbId]),
        'validationUrl' => Url::to(['/product/ajax-validate', 'wbId' => $model->wbId]),
        'enableAjaxValidation' => true,
        'validateOnChange' => true,
        'method' => 'post',
    ]); ?>

    <?= $form->field($model, 'wbId') ?>
    <?= $form->field($model, 'supplierArticle') ?>
    <?= $form->field($model, 'costPrice') ?>
    <?= $form->field($model, 'accountName') ?>

    <?php ActiveForm::end(); ?>

验证规则

代码语言:javascript
运行
AI代码解释
复制
    public function rules()
    {
        return [
            [['wbId', 'supplierArticle', 'costPrice', 'createDate'], 'required'],
            [['wbId'], 'integer'],
            [['costPrice'], 'number'],
            [['createDate', 'updateDate'], 'safe'],
            [['supplierArticle'], 'string', 'max' => 100],
            [['accountName'], 'string', 'max' => 50],
            [['wbId'], 'unique'],
        ];
    }

载荷模态形式函数

代码语言:javascript
运行
AI代码解释
复制
    public function actionLoadForm()
    {
        Yii::$app->response->format = Response::FORMAT_JSON;

        if (Yii::$app->request->isAjax)
        {
            $wbId = Yii::$app->request->post('wbId');

            if ($wbId)
            {
                $product = Product::find()->where(['wbId' => $wbId])->one();

                if ($product)
                {
                    return [
                        'success' => true,
                        'render' => $this->renderPartial('parts/form', [
                            'model' => $product
                        ])
                    ];
                }
            }
        }

        return false;
    }

Ajax更新函数

代码语言:javascript
运行
AI代码解释
复制
    public function actionAjaxUpdate($wbId)
    {
        Yii::$app->response->format = Response::FORMAT_JSON;

        if (Yii::$app->request->isAjax)
        {
            /* @var $model Product */
            $model = Product::find()->where(['wbId' => $wbId])->one();

            if ($model)
            {
                if ($model->load(Yii::$app->request->post()) && $model->validate())
                {
                    if ($model->save())
                    {
                        return [
                            'success' => true
                        ];
                    }
                }
            }
        }
        
        return [
            'success'=> false
        ];
    }

Ajax验证

代码语言:javascript
运行
AI代码解释
复制
    public function actionAjaxValidate($wbId)
    {
        Yii::$app->response->format = Response::FORMAT_JSON;

        if (Yii::$app->request->isAjax)
        {
            /* @var $model Product */
            $model = Product::find()->where(['wbId' => $wbId])->one();

            if ($model->load(Yii::$app->request->post()))
            {
                return ActiveForm::validate($model);
            }
        }

        return false;
    }

Js - load表单

代码语言:javascript
运行
AI代码解释
复制
 $(document).on('click', updateItemButton, function (e)
    {
        let wbId = $(this).closest('tr').data('key');

        $(updateModal).modal('show');

        $.ajax({
            type: "POST",
            url: "/product/load-form",
            dataType: "json",
            cache: false,
            data: {
                "wbId": wbId
            },
            success: function (response)
            {
                if (response.success)
                {
                    $(updateModal_content).html(response.render);
                }
                else
                {
                    console.log(response);
                }
            },
            error: function (response)
            {
                console.log(response);
            }
        });

        e.preventDefault();
    });

Js -提交-表单

代码语言:javascript
运行
AI代码解释
复制
$(document).on('submit', updateModal_form, function (e)
    {
        e.preventDefault();

        let formData = $(this).serializeArray();

        $.ajax({
            type: "POST",
            url: $(this).attr('action'),
            dataType: "json",
            cache: false,
            data: formData,
            success: function (response)
            {
                console.log(response);
            },
            error: function (response)
            {
                console.log(response);
            }
        });
    });

验证事件根本不会触发。无论是在更改数据时还是在提交表单时。如果输入了不正确的数据,请求将被发送到ajax-update,服务器返回一个空响应(因为没有通过验证)。如何让ajax数据保存和ajax验证协同工作?

*我想在不使用pjax的情况下解决这个问题。

**如果不通过ajax加载表单,一切都会正常工作。显然,问题就在这里。

EN

回答 1

Stack Overflow用户

发布于 2021-10-19 02:06:12

Thx to Michal Hynčica.我只需要在呈现表单时使用renderAjax()方法而不是renderPartial()方法。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69514108

复制
相关文章
Ajax工作流程(原生Ajax)
(1)初始化XMLHttpRequest对象。不同浏览器的差异,需要我们创建一个跨浏览器的对象,并判断XMLHttpRequest对象创建是否成功,如果不成功,则给予提示。
红目香薰
2022/11/29
7910
yii2 modal弹窗之ActiveForm ajax表单异步验证
前面我们讲述了yii2中如何使用modal以及yii2 gridview列表内更新操作如何使用modal的问题,本以为modal要告一段落可以开始新的话题了,但是实际问题往往超乎想像,这不modal弹窗提交的表单说是怎么验证的问题又出来了,又出来了!
botkenni
2019/09/02
1.5K0
yii2 modal弹窗之ActiveForm ajax表单异步验证
前面我们讲述了yii2中如何使用modal以及yii2 gridview列表内更新操作如何使用modal的问题,本以为modal要告一段落可以开始新的话题了,但是实际问题往往超乎想像,这不modal弹窗提交的表单说是怎么验证的问题又出来了,又出来了!
双面人
2019/04/10
1.2K0
yii2中ajax页面中a标签js跳转
Text-to-speech function is limited to 200 characters
botkenni
2019/09/02
4.1K0
AJAX 工作原理
AJAX 全称为“Asynchronous JavaScript and XML”(异步 JavaScript 和 XML),是一种创建交互式网页应用的网页开发技术。它使用:
李玺
2021/11/22
1K0
AJAX 工作原理
如何对动态创建控件进行验证以及在Ajax环境中的使用
首先给一个常规的动态创建控件,并进行验证的代码 [前端aspx代码] <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Test.aspx.cs" Inherits="Test" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <htm
菩提树下的杨过
2018/01/22
7.9K0
Ajax前端验证demo
需要载入的 js css 文件保存在 yun.seven77.pw/ 实测可以使用的 demo bootstrapvalidator-master,下载地址在google下载下面。 Tags: None Archives QR Code
简单、
2018/07/18
7560
Yii2实现ActiveForm ajax提交
做项目时总会碰到ajax提交的功能,特别是在做后台提交时,一般都会用模型自动生成,这个功能的使用会比较频繁,其实只要了解了流程,操作还是挺简单的,使用起来也方便。
PHP学习网
2022/08/03
6420
在 JS 中如何使用 Ajax 来进行请求
github 地址:https://github.com/qq44924588...
前端小智@大迁世界
2020/12/07
9K0
jQuery ajax - ajax() 方法jQuery ajax - ajax() 方法
http://www.w3school.com.cn/jquery/ajax_ajax.asp
一个会写诗的程序员
2018/08/17
14.5K0
JavaScript中如何取消ajax请求
jQuery为我们封装了ajax请求接口,在jQuery中,取消ajax请求也是通过调用.abort()方法,只不过操作的对象不再是原生XHR对象
刘亦枫
2020/03/19
3.2K0
js中ajax写法_ajax原生写法
function createXHR() { //首先我们得创建一个XMLHttpRequest对象
全栈程序员站长
2022/11/11
11.7K0
【Ajax】如何通过axios发起Ajax请求
✍️ 作者简介: 前端新手学习中。 💂 作者主页: 作者主页查看更多前端教学 🎓 专栏分享:css重难点教学 Node.js教学 从头开始学习 ajax学习 文章目录 axios   什么是axios   axios发起GET请求   axios发起POST请求   直接使用axios发起get请求   直接使用axios发起post请求 axios   什么是axios Axios是专注于网络数据请求的库,相比于原生的XMLHttpRequest对象,axios简单易用。相比于
坚毅的小解同志的前端社区
2022/11/28
1.7K0
【Ajax】如何通过axios发起Ajax请求
Ajax篇(001)-Ajax 是什么? 如何创建一个 Ajax?
答案:Ajax 全称是 asychronous javascript and xml,可以说是已有技术的组合,主要用来实现客户端与服务器端的异步交互,实现页面的局部刷新。 基本步骤 4 步走:(创建对象、建立连接、发送数据、接收数据) 解析: 1:我要创建一个XMLHttpRequest 对象。
齐丶先丶森
2022/05/12
4200
Ajax工作原理及概述
AJAX是异步的JavaScript和XML(Asynchronous JavaScript And XML)。简单点说,就是使用 XMLHttpRequest 对象与服务器通信。 它可以使用JSON,XML,HTML和文本等多种格式发送和接收。AJAX最吸引人的就是它的“异步”特性,也就是说他可以在不重新刷新页面的情况下与服务器通信,交换数据,更新页面。
用户1093975
2018/08/03
9120
ssm框架整合+Ajax异步验证
SSM框架是目前企业比较常用的框架之一,它的灵活性、安全性相对于SSH有一定的优势。说到这,谈谈SSM和SSH的不同点,这也是企业常考初级程序员的面试题之一。说到这两套框架的不同,主要是持久层框架Hibernate和MyBatis的不同和控制层框架SpringMVC和Struts2的不同。
呆呆
2021/05/23
9780
如何让搜索引擎抓取AJAX内容?
越来越多的网站,开始采用"单页面结构"(Single-page application)。 整个网站只有一张网页,采用Ajax技术,根据用户的输入,加载不同的内容。 这种做法的好处是用户体验好、节省流
ruanyf
2018/04/13
1.1K0
如何让搜索引擎抓取AJAX内容?
jquery怎么写ajax_js中ajax写法
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
全栈程序员站长
2022/11/11
8.7K0
如何让测试工作更专业
这道题目是几年前面试一家创业公司时,对方老板问我的问题,我觉得虽然小伙伴们在面试中碰到的几率不大,不过在工作中却很有思考它的必要。
张树臣
2019/04/28
7960
DWR让Ajax如此简单(1)
阅读提示:这篇文章让读者看到了一个使用了DWR的Web应用是如何一步步建立的。我会展示创建这个简单的示例应用的必要的细节,这个应用是可下载的并且可以在你的环境中布署来看看DWR如何工作。
源哥
2019/05/26
7580

相似问题

如何让HandleErrorAttribute与Ajax协同工作?

13

让AJAX与JavaScript协同工作

06

让Javascript函数与Ajax协同工作

21

让jquery ajax与codeigniter协同工作

32

JSF和Jquery AJAX --如何让它们协同工作?

20
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文