各位好!在使用DOJO时遇到如下问题:
用xhrPost提交一个普通表单可以正常运行。代码片段如下:<form id="categoryForm" action="addCategory">
<s:hidden id="id" name="id"/>
<label for="name">Name</label><input dojotype="dijit.form.TextBox" id="name" type="input" name="category.name"/>
<input type="submit" id="button" dojotype="dijit.form.Button" label="Add"  />
</form>
    dojo.connect(button, "onClick", function(event){
      event.preventDefault();
      event.stopPropagation();
      var xhrArgs = {
        form: dojo.byId("categoryForm"),
        preventCache:true,
        handleAs: "json",
        load: function(data){        },
        error: function(error){
          alert(error.message);
        }
      }
      var deferred = dojo.xhrPost(xhrArgs);
不过,当在<form>标签中加入dojotype="dijit.form.Form"属性以后,就出错了。<form id="categoryForm" action="addCategory" dojotype="dijit.form.Form">
<s:hidden id="id" name="id"/>
<label for="name">Name</label><input dojotype="dijit.form.TextBox" id="name" type="input" name="category.name"/>
<input type="submit" id="button" dojotype="dijit.form.Button" label="Add"  />
</form>
问题是,怎么用Ajax提交一个dijit.form.Form。谢谢!

解决方案 »

  1.   

    如果不修改代码肯定要出错的,后观你已经转成dojo控件了,代码中应该改为:
    ....
    var xhrArgs = {
            form: dijit.byId("categoryForm").domNode,
            preventCache:true,
    .....
      

  2.   

    多谢回答!
    您说的这种方法我也曾经试过,但也会出错。
    我用的是DOJO的1.4.0,请问您用的是什么版本?
    另外,以上这个方法,您确实在实际使用中证明过是可行的吗?
    请赐教!
      

  3.   

    再问个题外话,我在项目中好多地方用了dojo控件,在ff中还可以,在IE中就感觉好慢哦,按照官方的方法压缩了也没很好解决,请问各位是否也是这种情况哦?
      

  4.   

    恩,那这有可能是1.4中不能用了,或者是使用方法有所改变,也有可能是1.4的BUG。我现在的解决方法是,在xhrArgs中不用form属性来指定Form,而是通过content属性来定义参数的Key,然后再通过DOM取得对应的值。
    感觉比较麻烦