2012-06-06 84 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

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