Вызов асинхронного кода JavaScript в проекте Silverlight - PullRequest
2 голосов
/ 04 марта 2011

Мы используем Silverlight в качестве нашего решения для веб-интерфейса.У нас есть существующий веб-сервис, но размещение файла междомена и клиентской политики в корне сервера является нашим последним средством, поэтому сначала мы исследуем другие варианты.Я решил пойти другим путем - использовать HtmlPage.Window.Invoke () и использовать javascript для вызова веб-службы, получения данных JSON и возврата их в среду Silverlight, где я соответствующим образом проанализирую их.Я столкнулся с двумя проблемами:

Если я вызываю его синхронно, мой поток пользовательского интерфейса останавливается до завершения вызова, и я не знаю, как его обойти.У меня сложилось впечатление, что поток пользовательского интерфейса - единственный, который может получить доступ к javascript.

Если я вызываю это асинхронно, я не знаю, как НЕ возвращать данные до тех пор, пока readyState == 4.Есть идеи?

1 Ответ

3 голосов
/ 04 марта 2011

Вот базовое решение XmlHttpRequest, которое должно работать в большинстве современных браузеров: -

Javascript: -

 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.
     }));

 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...