0

javascriptからjsonの要素にアクセスしようとすると、この奇妙な問題が発生します。私はそのようなURLからjson文字列を取得します、

        // Create Request
        HttpWebRequest req = (HttpWebRequest)WebRequest.Create(@"www.someurl.com");

        // Create Client
        WebClient client = new WebClient();

        // Assign Credentials
        client.Credentials = new NetworkCredential("username", "pass");

        // Grab Data
        sjson = client.DownloadString(@"www.someurl.com");
        System.Web.Script.Serialization.JavaScriptSerializer oSerializer = new System.Web.Script.Serialization.JavaScriptSerializer();
        oSerializer.MaxJsonLength = Int32.MaxValue;
        sjson = oSerializer.Serialize(sjson);

しかし、htmlコードのjavascriptからこのsjson変数にアクセスすると、何も返されませんが、ハードコーディングすると値が返されます。これについて助けてください。私は多くのことを試みましたが、うまくいきませんでした。また、取得したjson文字列をシリアル化せずに渡そうとしましたが、そうするとjavascriptが機能しなくなります。:(以下はjavascriptコードです、

    <script type="text/javascript">
    var jsons = JSON.parse('<%=sjson%>');


    function initialize() {
        alert("hahahahaaa");
        document.writeln(jsons.Body[0].RowId.SensorIdValue);
        //document.writeln(myobject.Body[0].RowId.SensorIdValue);
    }
    </script>

問題は

    document.writeln(myobject.Body[0].RowId.SensorIdValue); 

myobject変数を使用すると値を返しますが、

    document.writeln(jsons.Body[0].RowId.SensorIdValue);

解析された値で使用しても何も返されません。:(

以下は、c#を介してシリアライザーを実行した後に取得するjson出力(response.write)のサンプルです。

これについて私を助けてください..私はここで問題を見つけることができないようです。

編集:

それが役立つ場合、以下は、シリアル化を行わずにサーバーから直接取得するjson文字列です。

所有者のリクエストにより、質問の内容がほとんど削除されていません

4

2 に答える 2

3

そこに表示されているのは、二重に JSON でシリアル化されたデータです。リモート サーバーから JSON を取得し、JavaScriptSerializer を使用して 2 回目の JSON エンコードを行いました。これについては、ASMX ScriptServices のコンテキストで私が書いた投稿で、より詳細に説明しています: http://encosia.com/asp-net-web-services-mistake-manual-json-serialization/。あなたのケースはまったく同じではありませんが、最終結果は同じです。

JavaScriptSerializer コードを削除し、再度sjsonシリアル化する代わりに、取得した JSON 文字列 ( ) を返します。

于 2012-09-11T04:16:41.590 に答える
0

リモート サーバーは、ページで直接使用して二重エンコーディングを回避できる JSON エンコード文字列を既に返しているため、Json シリアライザーを使用する必要はありません。

そう:

public string GetJson()
{
    // Create Client
    using (WebClient client = new WebClient())
    {
        // Assign Credentials
        client.Credentials = new NetworkCredential("username", "pass");

        // Grab Data
        return client.DownloadString(
            @"www.someurl.com"
        );
    }
}

その後:

<script type="text/javascript">
    var jsons = <%= GetJson() %>;
    function initialize() {
        alert("hahahahaaa");
        document.writeln(jsons.Body[0].RowId.SensorIdValue);
        //document.writeln(myobject.Body[0].RowId.SensorIdValue);
    }
</script>
于 2012-09-11T05:05:23.867 に答える