2011-03-03 11 views
2

WebインターフェイスのソリューションとしてSilverlightを使用しています。既存のWebサービスがありますが、クロスドメインとクライアントアクセスポリシーファイルをサーバーのルートに配置するのが最後の手段ですから、まず他のオプションを検討しています。別の方法として、HtmlPage.Window.Invoke()を使用してjavascriptを使用してWebサービスを呼び出し、JSONデータを受け取り、それを適切に解析するSilverlight環境に戻すことを決めました。私は2つの問題に遭遇しました:Silverlightプロジェクトで非同期のJavaScriptコードを呼び出す

私がそれを同期的に呼び出すと、呼び出しが完了するまで私のUIスレッドがフリーズし、それを回避する方法がわかりません。私は、UIスレッドがJavaScriptにアクセスできる唯一のものだという印象を受けています。

私はそれを非同期的に呼び出すと、readyState == 4になるまでデータを返さない方法はわかりません。何か案は?

Javascriptを: - - :ここで

+0

でのいくつかの種類がありますIE7 +、Chrome、Firefox 3以降、Safariの新しいバージョンで動作するJSONのXMLデータアイランドの代替機能ですか? – Sean

+0

質問に追加する追加の質問や詳細がある場合は、質問にコメントするのではなく、質問を編集するだけです。 – AnthonyWJones

+0

「データを返さない方法」の意味を明確にすることはできますか? – Shad

答えて

3

は、最新のブラウザのほとんどに取り組むべきfundemental XmlHttpRequestソリューションです

function getSomeJSON(url, callback) 
{ 
    var result = null; 
    var xhr = new XmlHttpRequest(); 
    xhr.open("GET", url, true); 
    xhr.onreadystatechanged = function() 
    { 
      if (xhr.readyState == 4) 
      { 
       if (xhr.status == 200) 
       { 
        result = xhr.responseText; 
       } 
       xhr = null; 
       callback(result); 
      } 
    } 
    xhr.send(null); 
} 

はSliverlight C#の

void FetchData() 
{ 
    string url = GenerateUrlForService(); 
    HtmlPage.Window.Invoke("getSomeJSON", new Action<string>(jsonResult => 
    { 
     // Code here to handle the json string result. 
     // This will run asynchronously so should not block the UI thread 
     // for the duration of the web service call. 
    })); 

} 
+0

リクエストを手動で処理したくない場合は、代わりにXmlHttpRequestの代わりにjQueryのajax APIを使用できます。いずれにしても、非同期要求を処理する際には、コールバックメソッドを使用することが最善の方法であることに同意します。 –

関連する問題