2011-09-11 56 views
0

下面是我想採取的步驟:從JavaScript返回對象的Silverlight

1)用戶輸入搜索項框在Silverlight,然後按下回車

2)搜索術語傳入的javascript通過C#代碼:HtmlPage.Window.Invoke(「CallAPI」,SearchText);

3)CallAPI函數命中通過$ .getJSON &返回一個值到JS回調函數[這已經完成]

4)結果對象被返回到Silverlight/C#頁在Silverlight顯示的API UI

我可以做除了第4步以外的任何事情。我如何從Javascript獲取JSON對象到C#中?我一直工作在這最後幾個小時,而這也正是我想會做到這一點:

ScriptObject myScriptObject = (ScriptObject)HtmlPage.Window.Invoke("CallWordStreamAPI", SearchText); 

我設置在我的JS斷點&驗證了我的return語句的對象肯定是用填充如預期的那樣,20行數據。

我在C#中設置了一個斷點(ScriptObject myScriptObject = ....),並且myScriptObject在調用之後爲空。 如果我在「返回r」(我的對象)行在firebug/chrome dev中設置斷點,我可以看到r.data中列出了20個項目。如果我在上面列出的myScriptObject行之後設置斷點,myScriptObject爲空。

您的幫助表示讚賞。

Scott

+0

你爲什麼要打電話到JavaScript呢?爲什麼不直接用silverlight編碼呢? – AnthonyWJones

+0

我有的API庫是在JS中,文檔說:「我們格式化的響應被設計爲使用JQuery getJSON方法最佳地工作。」 –

+0

好吧,但沒有「jQuery優化json」之類的東西。 json是一個標準,Silverlight有兩種非常好的方式來處理json,我強烈建議你使用它們而不是阻止JavaScript調用。 – AnthonyWJones

回答

0

我從服務器端的ViewModel調用它。我最終使用MVVM Messaging將關鍵字發送到客戶端的代碼中。然後,我調用了我的JS函數,返回了結果,並向我的視圖模型中回覆了一條消息。

除此之外,句法問題在這裏得到解決:

How can I pass a JavaScript function to Silverlight?

0

我的代碼:

<!-- language: JavaScript --> 
function sendText() { 
    return "Hi from Javascript!"; 
} 

<!-- language: C# --> 
string obj = HtmlPage.Window.Invoke("sendText", null) as string; 
txtReturnData.Text = obj; 

<!-- language: VB.Net --> 
Dim obj As String = TryCast(HtmlPage.Window.Invoke("sendText", Nothing), String) 
txtReturnData.Text = obj