2012-06-05 39 views
0

我已經花了幾天的時間在這方面工作,並且真的很笨拙。我一直在研究演示和樣本,當我在本地嘗試使用自己的url時,這些演示和樣本從不工作。我有一個web服務返回json的結果,我只是試圖用dojo調用它,現在只是查看結果。我採取了搜索谷歌的例子,只是取代了網址和參數。現在,我可能仍然不明白以下基本知識: - io.script.get vs xhrGet 如果使用跨域URL,最好使用io.script.get?正確? 現在什麼是callbackparam?這是在web服務中調用的函數嗎? 我的web服務url如下: http://xxx.xxx.x.xxx/WcfServices/WcfInstance/Service1.svc/RetrievData?query=Worddojo.io.script.get vs dojo.xhrGet

當我使用下面的代碼時,我什麼也沒有顯示。

function searchGoogle() { 
    // Look up the node we'll stick the text under. 
    var targetNode = dojo.byId("rules"); 

    // The parameters to pass to xhrGet, the url, how to handle it, and the callbacks. 
    var jsonpArgs = { 
     url: "http://xxx.xxx.x.xxx/WcfServices/WcfInstance/Service1.svc/RetrieveData?", 
     callbackParamName: "callback", 
     content: { 

      query:"dojowords" 
     }, 
     load: function (data) { 
      // Set the data from the search into the viewbox in nicely formatted JSON 
      targetNode.innerHTML = "<pre>" + dojo.toJson(data, true) + "</pre>"; 
     }, 
     error: function (error) { 
      targetNode.innerHTML = "An unexpected error occurred: " + error; 
     } 
    }; 
    dojo.io.script.get(jsonpArgs); 
} 
dojo.ready(searchGoogle); 

這裏是WebService的結果是什麼樣子:

"{\"rules\":[{\"value\":\"AllState\"}, 
{\"value\":\"Cidade de Goa beach\"},{\"value\":\"Euro 2012\"},  
{\"value\":\"Euro2012\"},{\"value\":\"European&Championship\"}, 
{\"value\":\"Holiday Inn Resort\"}, 
{\"value\":\"Holiday Inn Resort goa\"}, 
{\"value\":\"Hotel Goa\"},{\"value\":\"Hyatt Goa\"},{\"value\":\"I buy car\"},... 

如果我得到這部分正確的,那麼至少我知道我有我就可以綁定到DataGrid或圖表數據。

回答

3

dojo.io.script.get適用於所有跨域請求。 xhrGet針對相同的域名請求。

dojo.io.script.get使用了一個需要jsonp或json填充的hack。這將Web服務調用的響應封裝在自執行函數中。函數名稱是回調名稱。必須在調用之前連線,以便在響應返回時知道已定義的函數。

所有的論點是有據可查的http://dojotoolkit.org/reference-guide/1.7/dojo/io/script.html

我的猜測,爲什麼你的服務沒有工作是因爲你寫的Web服務,它不處理JSONP。它不包含其在callbackparamname中的響應。

您的結果應該是這個樣子

callback({json}); 

其中回調是無論你在callbackParamName

設置您還可以刪除?從你的網址,應該爲你處理。

+0

感謝您的回覆。如果Web應用程序和Web服務託管在同一臺服務器上,那麼我可以使用xhrGet?或者當客戶端嘗試從他們的機器運行它,但是在我們的LAN中時,這會成爲問題。其次,只是包裝我的迴應就像這個callbackfunction({「{\」rules \「:[{\」value \「:\」AllState \「}, {\」value \「:\」Cidade de Goa beach \ 「},{\」value \「:\」Euro 2012 \「}]}儘可能的回調。 – vbNewbie

+0

@vbNewbie沒有理由使用xhrGet,如果您正在向域a發出請求。客戶端是分佈式的並不重要,只要它是 - > a而不是 - > b那麼xhrGet就可以了,如果你切換到dojo.xhrGet,你需要添加handleAs:'json'閱讀參考指南,你也可以讓你的服務檢測回調參數,並決定是否包裝響應或不靈活,我不會硬編碼值,你也可以使用xhrGet獲得更多的功能,因爲它支持,而不是cross domain hack。 – Steve

+0

非常感謝你的詳細解釋。我不想轟炸你,但是當我嘗試dojo.xhr時,它一直告訴我不能oad myurl。我也從同一臺服務器運行它,IE錯誤是拒絕訪問。所以最後一個問題是,xhrGET是從遠程服務器獲取數據的最佳選擇,例如。一個用於在Web應用程序中填充dojo小部件的sql數據庫。我會做進一步的研究並從這裏抽樣。再次感謝。 – vbNewbie

相關問題