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

当我只是将该网址放在浏览器中时,我会得到下面的响应,如预期的那样

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

但是 getJSOn 返回 Empty Response,如 Firebug 中所见,url 本身带有红色字体。这是一个跨域调用,我已经启用了跨域它 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。$.getJSON您可以通过添加到 URL来使用它?callback=?(取决于服务器端 API)。确保您的 API 确实支持适当地发出回调。

此处的文档:http: //api.jquery.com/jQuery.getJSON/

于 2013-01-22T01:08:37.097 回答
0

很抱歉迟到了——你不必使用 jsonp,我将 WCF 与 angularjs、jquery、移动应用程序等一起使用——从不使用 jsonp。

只需像下面这样装饰您的类和属性,它就会序列化。

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