形式的值';使用Dojo将字段添加到Ajax调用

形式的值';使用Dojo将字段添加到Ajax调用,ajax,json,dojo,Ajax,Json,Dojo,我有这样一个表单(来自小部件模板): 两个实际问题: 如果我使用that.form.value.email而不是.password1.get('value'),有时会将过时的值提交到表单(!)。例如,如果我在password2字段中键入某个内容并直接按enter键,那么实际提交将发生在Dojo中预期的?这是怎么发生的 是否有更好的方法获取表单值,以便“password[0]”和“password[1]”自动成为数组等 您可以使用dojo.xhrPost()指定表单,请参阅并查看示例1,其中它发送

我有这样一个表单(来自小部件模板):

两个实际问题:

  • 如果我使用that.form.value.email而不是.password1.get('value'),有时会将过时的值提交到表单(!)。例如,如果我在password2字段中键入某个内容并直接按enter键,那么实际提交将发生在Dojo中预期的?这是怎么发生的

  • 是否有更好的方法获取表单值,以便“password[0]”和“password[1]”自动成为数组等


  • 您可以使用
    dojo.xhrPost()
    指定表单,请参阅并查看示例1,其中它发送dojo.byId(“myform”)。我猜您可以这样称呼它,而不必担心如何将这些参数传递给服务器。这将解决发送过时参数的问题

    如果你需要任何评论


    幸运的是,

    您可以使用
    dojo.xhrPost()
    指定表单,请参阅并查看示例1,其中它发送dojo.byId(“myform”)。我猜您可以这样称呼它,而不必担心如何将这些参数传递给服务器。这将解决发送过时参数的问题

    如果你需要任何评论


    幸运的是,

    dijit.form下的每个小部件都确保使用其值更新具有正确名称的表单元素,即使这些值类似于筛选选择单击或日历中的日期

    话虽如此,我们知道一个公共表单.submit()将按预期工作

    但是,在作为AJAX请求进行提交时,我们需要循环表单元素以获取其值,并使其成为json键值对象

    很简单,如果像这样调用dojo.xhrPost,dojo.xhrPost会在内部执行此操作:

    dojo.xhrPost ( {
       url: 'submiturl.sapi',
       form: dojo.byId('myFormDomId')
    } )
    
    对于更高级别的控制,您可以使用
    dojo.formToJson
    dijit.form.form.getValues
    ——例如,这两个变体

    var values = dojo.formToJson(dojo.byId('myFormDomId'));
    // OR
    var values = dijit.byId('myFormDijitId').getValues();
    // mod or mixin your custom values, examplewise
    values = dojo.mixin(values, {   anotherVariable: 'sentAsPostParam'   });
    
    dojo.xhrPost ( {
        url: 'submitUrl.sapi',
        content : values
    } );
    
    关于你的第一个问题1)
    如果验证程序附加到小部件电子邮件,并且验证呈现为有效,则不会相应地设置输入元素。一旦出现1-keyup事件或2-onblur事件,设置值即完成。要确保发送正确的值,请像这样使用dijit.form.form.validate(因为您已经扩展了表单dojoType)

    var formWidget = dijit.byId('myFormDijitId');
    if(formWidget.validate()) {  // loops all form widgets and 'sums' up their validators
       dojo.xhrPost( { url: 'submiturl.sapi', content: formWidget.getValues() } );
    }
    
    编辑:

    特别是为了在项中创建嵌套数组,OP需要JsonRest存储区-不需要使用exact相同的名称调用输入元素,例如

    <input name="password" 
                            id="${id}_password1" data-dojo-attach-point="password1" data-dojo-type="app.ValidationPassword" />
    <input name="password" 
                            id="${id}_password2" data-dojo-attach-point="password2" data-dojo-type="app.ValidationPassword" />
    

    dijit.form下的每个小部件都确保使用其值更新具有正确名称的一个表单元素,即使这些值类似于筛选选择单击或日历中的日期

    话虽如此,我们知道一个公共表单.submit()将按预期工作

    但是,在作为AJAX请求进行提交时,我们需要循环表单元素以获取其值,并使其成为json键值对象

    很简单,如果像这样调用dojo.xhrPost,dojo.xhrPost会在内部执行此操作:

    dojo.xhrPost ( {
       url: 'submiturl.sapi',
       form: dojo.byId('myFormDomId')
    } )
    
    对于更高级别的控制,您可以使用
    dojo.formToJson
    dijit.form.form.getValues
    ——例如,这两个变体

    var values = dojo.formToJson(dojo.byId('myFormDomId'));
    // OR
    var values = dijit.byId('myFormDijitId').getValues();
    // mod or mixin your custom values, examplewise
    values = dojo.mixin(values, {   anotherVariable: 'sentAsPostParam'   });
    
    dojo.xhrPost ( {
        url: 'submitUrl.sapi',
        content : values
    } );
    
    关于你的第一个问题1)
    如果验证程序附加到小部件电子邮件,并且验证呈现为有效,则不会相应地设置输入元素。一旦出现1-keyup事件或2-onblur事件,设置值即完成。要确保发送正确的值,请像这样使用dijit.form.form.validate(因为您已经扩展了表单dojoType)

    var formWidget = dijit.byId('myFormDijitId');
    if(formWidget.validate()) {  // loops all form widgets and 'sums' up their validators
       dojo.xhrPost( { url: 'submiturl.sapi', content: formWidget.getValues() } );
    }
    
    编辑:

    特别是为了在项中创建嵌套数组,OP需要JsonRest存储区-不需要使用exact相同的名称调用输入元素,例如

    <input name="password" 
                            id="${id}_password1" data-dojo-attach-point="password1" data-dojo-type="app.ValidationPassword" />
    <input name="password" 
                            id="${id}_password2" data-dojo-attach-point="password2" data-dojo-type="app.ValidationPassword" />
    

    谢谢你的回答!但是
    formWidget.getValues()
    不会创建一个对象,其中
    password[0]'和'password[1]
    被合并到一个名为
    password
    的漂亮数组中,该数组包含两个元素!有没有一个简单的方法可以做到这一点?(请记住,我正在保存一个存储:
    workspacesAnon.put(data)
    所以
    data
    需要是一个“普通”数组!)啊,我错过了一个事实,那就是你自己实际上并没有调用XHR,是的。在这种情况下,在
    input name=pass
    中使用NO[0-1-2]并使用dojo.formToJson(请参阅)谢谢您的回答!但是
    formWidget.getValues()
    不会创建一个对象,其中
    password[0]'和'password[1]
    被合并到一个名为
    password
    的漂亮数组中,该数组包含两个元素!有没有一个简单的方法可以做到这一点?(请记住,我正在保存一个存储:
    workspacesAnon.put(data)
    所以
    data
    需要是一个“普通”数组!)啊,我错过了一个事实,那就是你自己实际上并没有调用XHR,是的。在这种情况下,在
    input name=pass
    中使用NO[0-1-2]并使用dojo.formToJson(请参阅)