0

次の状況で私を助けてください:

ボタンが 1 つしかないページ p1.aspx があります。

<button id="btn1" onclick="btnclick();">Button</button>    
<script type="text/javascript">
  $('#btn1').click(function () {
    $.getJSON("http://localhost/p2.aspx", function (data) {
      $.each(data, function (i, field) {            
        alert(field);
      });
    });
  });
</script>

上記は、JavaScriptを介してJSONテキストを取得する方法です。

Web アプリケーションは内部にhttp://localhost/p2.aspxリダイレクトされます。http://localhost/p3.aspxそして、ページhttp://localhost/p3.aspxは再び にリダイレクトされ http://localhost/p2.aspx?code=1ます。

code=1

私のjavascriptコードで読みたい値です。しかし、それはうまくいきません。

p2.aspx では、次のように JSON データを生成します

Response.Clear();
Response.ContentType = "application/json; charset=utf-8";
Response.Write(jsonString);
Response.End();

この後、javascript 経由で json データを読み取ることができません。しかし、 http://localhost/p2.aspxWebブラウザ経由で配置すると、ページにjsonデータが表示されます。

4

1 に答える 1

3

JSONPそれを機能させたい場合は、使用する必要があります。

callbackしたがって、スクリプトは次のパラメーターを考慮する必要があります。

Response.Clear();
string callback = Request["callback"];
if (!string.IsNullOrEmpty(callback))
{
    Response.ContentType = "application/javascript; charset=utf-8";
    Response.Write(string.Format("{0}({1})", callback, jsonString));
}
else
{
    Response.ContentType = "application/json; charset=utf-8";
    Response.Write(jsonString);
}
Response.End();

そして、クライアントで:

$.getJSON("http://localhost/p2.aspx?callback=?", function (data) {
    ...
});

callbackクエリ文字列パラメーターが に設定されていることに注意してください?。基本的に、jQuery はこれを次のようなリクエストに変換します。

http://localhost/p2.aspx?callback=jQuery123456789....

サーバー側のスクリプトはもちろん、コールバック名にラップされた文字列を返す必要がJSONPあります。JSON

jQuery123456789....({"code":1})

またjsonString、コードで使用される変数が実際の JSON 文字列であることを確認してください (その名前が示すように)。質問 ( code=1) で示した内容は、JSON とはかけ離れているためです。

于 2013-07-31T20:24:28.997 に答える