1

文字列 (実際には xml ですが、文字列を取得しようとしています) を持つサーバーと Silverlight アプリの間のプロキシとして機能するハンドラーを使用しています。ハンドラーを作成し、文字列 (xml) を適切に収集します。私が抱えている問題は、その文字列を JSON から、JavaScript が Silverlight コードに返すことができる文字列に変換することです。

Javascript:

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js" type="text/javascript"></script>
<script type="text/javascript">
    var xmlReturn = new String("");
    function xmlStart() {
        $.getJSON('xmlProxy.ashx', function (data) {
            setXml(data);
        });
    }
    function setXml(data) {
        xmlReturn = data;
    }
    function getXml() {
        alert(xmlReturn);
        return xmlReturn;
    }

シルバーライト:

private void button1_Click(object sender, RoutedEventArgs e)
{
    HtmlPage.Window.Invoke("xmlStart");
    string test = (String)HtmlPage.Window.Invoke("getXml");

    textBox1.Text = test;
}

念のため、ハンドラー コード (セキュリティのために baseurl を取り出しています):

namespace HttpHandler_Proxy
{
    public class xmlProxy : IHttpHandler
    {

        public void ProcessRequest(HttpContext context)
        {
            WebClient getCap = new WebClient();

            string baseurl = "some_url";
            string response = getCap.DownloadString(baseurl);

            context.Response.ContentType = "application/json";

            context.Response.Write(response);
        }

        public bool IsReusable
        {
            get
            {
                return false;
            }
        }
    }
}

私は Javascript と jQuery の両方に不慣れなので、これは些細な質問かもしれませんが、そのことをお詫び申し上げます。このバージョンのコードではxmlReturn""

私は他のバージョンを実行しましたが、コードは常に null/undefined/"" として Silverlight に返されます。

4

2 に答える 2

0

コンテンツ タイプは json に設定されていますが、エンコードを行っていないようです。つまり、サーバーからの応答を有効な json に変換しています。次のようなものを追加してみてください:

response = new JavaScriptSerializer().Serialize(response);
于 2012-11-29T00:07:16.723 に答える
0

その時点でその文字列をjsonとして扱うつもりがない場合は、$.load代わりに使用してみてください。getJSON

編集

まず、data成功コールバック (console.log(data)) 内の値を確認する必要があります。サーバー側のコードが意図したとおりに返されていることを確認してください。

于 2012-11-28T22:57:28.447 に答える