代码插入数据库两次

Code inserting into database twice

本文关键字:两次 插入 数据库 代码      更新时间:2023-09-26

我有表格

<aui:form action="<%= editURL %>" method="POST" name="fm">
    <aui:fieldset>
        <aui:input name="name" />
        <aui:input name="url" />
        <aui:input name="address" />
    </aui:fieldset>
    <aui:button-row>
        <aui:button type="submit" />
        <aui:button name="cancel" value="Cancel"/>
    </aui:button-row>
</aui:form>

还有这段javascript代码,它两次插入数据库,我不知道为什么。

<aui:script use="aui-base,aui-form-validator,aui-io-request">
    AUI().use('aui-base','aui-form-validator',function(A){
        var rules = {
            <portlet:namespace/>name: {
                required: true
            },
            <portlet:namespace/>url: {
                url: true
            },
            <portlet:namespace/>address: {
                required: true
            },
        };
        var fieldStrings = {
            <portlet:namespace/>name: {
                required: 'The Name field is required.'
            },
            <portlet:namespace/>address: {
                required: 'The Address field is required.'
            },
        };
        alert("validator");
        new A.FormValidator({
            boundingBox: '#<portlet:namespace/>fm',
            fieldStrings: fieldStrings,
            rules: rules,
            showAllMessages:true,
            on: {
                    validateField: function(event) {
                     },
                    validField: function(event) {
                   },
                    errorField: function(event) {
                    },
                    submitError: function(event) {
                        alert("submitError");
                        event.preventDefault(); //prevent form submit
                    },
                    submit: function(event) {
                        alert("Submit");
                        var A = AUI();
                        var url = '<%=editURL.toString()%>';
                        A.io.request(
                            url,
                            {
                                method: 'POST',
                                form: {id: '<portlet:namespace/>fm'},
                                on: {
                                    success: function() {
                                        alert("inside success");// not getting this alert.
                                        Liferay.Util.getOpener().refreshPortlet();
                                        Liferay.Util.getOpener().closePopup('popupId');                                     
                                    }
                                }
                            }
                        );
                   }
                }
        });
    });
</aui:script>

但是,如果我添加以下代码,这是多余的,因为它已经存在于上述代码的submit block中,并且由于我在表单中没有任何save按钮而没有以任何方式触发,那么该值只插入一次。

<aui:script use="aui-base,aui-io-request">
    A.one('#<portlet:namespace/>save').on('click', function(event) {
        var A = AUI();
        var url = '<%=editURL.toString()%>';
        A.io.request(
            url,
            {
                method: 'POST',
                form: {id: '<portlet:namespace/>fm'},
                on: {
                    success: function() {
                        Liferay.Util.getOpener().refreshPortlet();
                        Liferay.Util.getOpener().closePopup('popupId');
                    }
                }
            }
        );
    });
</aui:script>

这段代码生成Uncaught TypeError: Cannot read property 'on' of null,我认为这是因为表单中没有save按钮。但添加这段代码后,值只插入数据库一次,这正是我想要的,但逻辑有缺陷。如何仅通过使用第一段代码就可以得到我想要的结果?

插入发生了两次。一次来自CCD_ 5,另一次来自于CCD_。添加这段代码

<aui:script use="aui-base,aui-io-request">
    A.one('#<portlet:namespace/>save').on('click', function(event) {
        var A = AUI();
        var url = '<%=editURL.toString()%>';
        A.io.request(
            url,
            {
                method: 'POST',
                form: {id: '<portlet:namespace/>fm'},
                on: {
                    success: function() {
                        Liferay.Util.getOpener().refreshPortlet();
                        Liferay.Util.getOpener().closePopup('popupId');
                    }
                }
            }
        );
    });
</aui:script>

导致仅插入一次。由于表单中没有save按钮,因此该代码显然没有相关性。因此,有Uncaught TypeError: Cannot read property 'on' of null掩盖了缺陷,阻止了表单提交两次。

删除上面的代码并阻止默认提交(通过在表单标记中添加onSubmit="event.preventDefault();)解决了这个问题。