2012-06-06 40 views
2

这里是我的源代码:道场xhrPost问题

<script> 
    function sendText(){ 
    require([ "dijit/form/Button", "dojo/_base/xhr"], 
     function(Button,xhr) { 

     xhr.post({ 
      url: "validURL1.html", 
      form: dojo.byId("myForm"), 
      load: function(data){ 
      var newStore = 
       new ItemFileWriteStore({url:'validURL2.html'}); 
      dijit.byId("grid").setStore(newStore); 
      }, 
      error: function(error){ 
      alert("error!"); 
      } 
     }); 
    }); 
    } 
</script> 

<button data-dojo-type='dijit.form.Button' onClick ='sendText()'>submit</button> 

但是,当我按下按钮,并尝试将我的数据发布到服务器,萤火说:

_145未定义

那么我的代码有什么问题? 什么是'_145'错误?

UPDATE

<script> 

require([ "dijit/form/Button", "dojo/_base/xhr","dijit/form/Form", "dojo/data/ItemFileWriteStore", 
      "dojo/dom-form","dijit/registry","dojo/ready", "dojox/grid/EnhancedGrid"], 
     function(Button,xhr, Form, ItemFileWriteStore, domForm, registry,ready, EnhancedGrid) { 
     var hasBeenSent = false; 

     window.sendText = function() { 

     xhr.post({ 
      url: "validURL1.html", 
      form: dojo.byId("myForm"), 
      handleaAs: "text", 
      load: function(data) { 
       var newStore = new ItemFileWriteStore({url:'validURL2.html'}); 
       dojo.byId("grid").setStore(newStore); 
      }, 
      error: function(error){ 

      alert("error!"); 
      }, 
      handle: function() { 

       hasBeenSent = true; 
      } 
     }); 

      } 
}); 
</script> 

现在它说:

TypeError: dojo.byId("grid").setStore is not a function 

不过,我需要 “enhancedGrid”。所以也许我应该需要一些其他模块或类?

+0

IM不能完全肯定,但我认为,如果您设置了'load'和'handle',那么只有一个会跑 – mschr

回答

1

更改dojo.byId( “网格”)为dijit.byId( “网格”)为您的来电dojo.byId( “网格”)将只返回的DOMNode而不是控件。

此外,请确保您的'网格'是标记声明,即dojo.parser.parse()已运行。如果parseOnLoad:true已设置,则需要等待dojo.ready才能触发,例如dojo.ready(function() { require.... });require(["dojo/domReady!", ....], function(..) { XHR });

最终,如果在您的require语句中只调用update-xhr,此构造将表现得更好。

​​
+0

@ mschr我忘了回答我的问题,但你的回答是正确的 –

1

您正在使用压缩/缩小版的dojo。这样做的算法将用较小的变量名称(即_145)替换变量名称以减小JavaScript文件的大小。

翻翻压缩道场文件,我发现这一点:

function formToObject(_145){var ret={},_146=dom.byId(_145).elements; 

我猜dojo.byId("myForm")没有返回表单。

我还建议设置您的开发环境以便能够使用未编译的文件。它将允许在浏览器中进行更好的调试。

http://swingingcode.blogspot.com/2012/03/dojo-configurations.html

+0

是的,我看到的来源。看到更新 –