形式的值';使用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,其中它发送
您可以使用
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(请参阅)