1

JSON 形式のデータを返す WCF サービスがあります。Web ブラウザを使用すると結果を簡単に確認できますが、Jquery getJSON を使用すると動作しません。私はそれがデータを返していることをフィドラーで見ることができますが、ファイアバグでは赤いフォントと空の応答で表示されます。

ここに私のWCFサービスがあります

[OperationContract]
[WebInvoke(Method = "GET",
    ResponseFormat = WebMessageFormat.Json,
    BodyStyle = WebMessageBodyStyle.Wrapped,
    UriTemplate = "GetUrl/{iType}")]
String GetUrl(string iType);



    public String GetUrl(string iType)
    {

            return strurl;
        }

私のJSON呼び出しは次のようになります

    $.getJSON("http://localhost/UrlSvc/UrlService.svc/GetUrl/1",
function (data) {
    console.log("Data JSOn Got");
    $.each(data.items, function (i, item) {
        console.log("Data Received");
    });
});

そのURLをブラウザに入力すると、期待どおりに以下の応答が得られます

{"GetChartUrlResult":"ulr_fdba9bc2-7ff7-467f-a6e0-6f4d234169d2.png"}

しかし、getJSOn は、URL 自体に赤いフォントの Firebug に見られるように、空の応答を返します。これはクロスドメイン呼び出しであり、クロスドメインを有効にしました WCF

4

3 に答える 3

3

ブラウザーは、クロスドメイン AJAX 呼び出しを許可せず、XMLHTTPRequest が含まれるスクリプトまたはページをロードしたドメイン以外のドメインに発生するのを防ぎます。

これを回避するには、AJAX 応答を JavaScript でラップする JSONP 呼び出しを使用できます。次のクエリ文字列エントリをリクエストに追加します。

callback=?

また、WCF を使用している場合は、サービスで JSONP を有効にする必要があることに注意してください。これを行うには、構成ファイルで crossDomainScriptAccessEnabled 属性を true に設定します。

<system.serviceModel>
  <serviceHostingEnvironment aspNetCompatibilityEnabled="true"/>
  <standardEndpoints>
    <webScriptEndpoint>
      <standardEndpoint name="" crossDomainScriptAccessEnabled="true"/>
    </webScriptEndpoint>
  </standardEndpoints>
</system.serviceModel>

JSONP と WCF の詳細については、こちらを参照してください。

于 2013-01-22T01:14:25.717 に答える
1

呼び出しがクロスドメインの場合は、jsonpを使用する必要があります。$.getJSONURLに追加することで使用でき?callback=?ます(サーバー側APIによって異なります)。APIがコールバックの適切な発行をサポートしていることを確認してください。

ここのドキュメント:http://api.jquery.com/jQuery.getJSON/

于 2013-01-22T01:08:37.097 に答える
0

パーティーに遅れて申し訳ありません-jsonpを使用する必要はありません.angularjs、jquery、モバイルアプリなどでWCFを使用しており、jsonpを使用することはありません.

次のようにクラスとプロパティを装飾するだけで、シリアル化されます。

[DataContract]
public class MyCustomClass
{
   [DataMemember]
   public string Name { get;  set;}
}
于 2014-11-07T00:05:39.257 に答える