2012-05-10 48 views
0

對於Dojo Toolkit來說,我能夠成功獲取xhrGet以加載頁面加載,但是當選擇DataGrid的一行時,我需要加載xhrGet。有甚麼辦法可以這樣做嗎?如何通過單擊而不是頁面加載來觸發Dojo xhrGet?

<!doctype html> 
<html> 
<head> 
<script type="text/javascript> 
dojo.connect(btn, "onclick", function() { 
/************************/ 
/* xhr - AJAX functions */ 
/************************/ 
dojo.ready(function(){ 

var targetNode = dojo.byId("xhr-container"); 

var xhrArgs = { 
url: "info-to-get.html", 
handleAs: "text", 
load: function(data){ 
targetNode.innerHTML = data; 
}, 
error: function(error){ 
targetNode.innerHTML = "You messed up, dummy!: " + error; 
} 
} 
var deferred = dojo.xhrGet(xhrArgs); 
}); 
}); 
</script> 
</head> 
<body> 
<button type="button" id="btn">TEST</button> 
<br> 
<br> 
<div id="xhr-container"></div> 
</body> 
</html> 

xhrGet可以在頁面加載時自行工作,在嘗試通過按鈕調用它時沒有骰子。

+0

我目前正試圖以編程方式使用一個簡單的按鈕,試圖觸發XHR但我不能甚至可以讓它工作。 –

回答

1

這將連接點擊一個html domNode來發射一個函數,你可以把你的xhr代碼。

dojo.connect(someDomNode, 'onclick', function() { 
    //xhr code here 
}); 

如果它是一個小部件,像dijit.form.Button你可以寫

dojo.connect(someWidget, 'onClick', function() { 
    //xhr code here 
}); 

--edit ----------------------

根據您發佈的代碼,我希望下面的工作:

dojo.ready(function(){ 

    var targetNode = dojo.byId("xhr-container"); 

    var fnDoXHR = function() { 
     var xhrArgs = { 
      url: "info-to-get.html", 
      handleAs: "text", 
      load: function(data){ 
       targetNode.innerHTML = data; 
      }, 
      error: function(error){ 
       targetNode.innerHTML = "You messed up, dummy!: " + error; 
      } 
     }; 
     var deferred = dojo.xhrGet(xhrArgs); 
    }; 

    dojo.connect(dojo.byId('btn'), 'onclick', fnDoXHR); 
}); 
+0

好的答案,但我會補充說,爲可維護性,實際上做xhr的函數應該是它自己的函數引用從連接,而不是與連接聲明, – Maess

+0

謝謝你的答案,克雷格,這其實是我一直在嘗試,但迄今沒有運氣。我將編輯我的問題,以包括我目前的代碼,因爲我太過於不喜歡到目前爲止工作。 :( –

+0

釘了它,克雷格!非常感謝! –

相關問題