C# WCF web服务和getJSON为跨域调用返回空数据
我有一个返回JSON格式数据的WCF服务。当我使用Web浏览器时,我可以很容易地看到结果,但当使用Jquery getJSON时,我无法让它工作。我可以在fiddler中看到它正在返回数据,但在firebug中它显示为红色字体和空响应 这是我的WCF服务C# WCF web服务和getJSON为跨域调用返回空数据,c#,jquery,asp.net-mvc,wcf,rest,C#,Jquery,Asp.net Mvc,Wcf,Rest,我有一个返回JSON格式数据的WCF服务。当我使用Web浏览器时,我可以很容易地看到结果,但当使用Jquery getJSON时,我无法让它工作。我可以在fiddler中看到它正在返回数据,但在firebug中它显示为红色字体和空响应 这是我的WCF服务 [OperationContract] [WebInvoke(Method = "GET", ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyS
[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返回空响应,如Firebug中所示,url本身带有红色字体。
这是一个跨域调用,我已经启用了跨域it WCF如果调用是跨域的,则必须使用jsonp。您可以将它与
$.getJSON
一起使用,方法是将回调=?
添加到URL(取决于服务器端API)。确保您的API支持适当地发出回调
此处的文档:如果调用是跨域的,则必须使用jsonp。您可以将它与
$.getJSON
一起使用,方法是将回调=?
添加到URL(取决于服务器端API)。确保您的API支持适当地发出回调
此处的文档:浏览器不允许跨域AJAX调用,并阻止XMLHTTPRequest发生在任何域上,但加载包含脚本或页面的域除外 为了解决这个问题,您可以使用JSONP调用将AJAX响应包装为javascript。将以下查询字符串条目添加到请求中:
callback=?
另外,请注意,如果您使用的是WCF,则需要在服务中启用JSONP。通过将配置文件中的crossDomainScriptAccessEnabled属性设置为true来实现此目的:
<system.serviceModel>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true"/>
<standardEndpoints>
<webScriptEndpoint>
<standardEndpoint name="" crossDomainScriptAccessEnabled="true"/>
</webScriptEndpoint>
</standardEndpoints>
</system.serviceModel>
可以找到关于JSONP和WCF的更多信息。浏览器不允许跨域AJAX调用,并阻止XMLHTTPRequest发生在任何域上,但加载包含脚本或页面的域除外 为了解决这个问题,您可以使用JSONP调用将AJAX响应包装为javascript。将以下查询字符串条目添加到请求中:
callback=?
另外,请注意,如果您使用的是WCF,则需要在服务中启用JSONP。通过将配置文件中的crossDomainScriptAccessEnabled属性设置为true来实现此目的:
<system.serviceModel>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true"/>
<standardEndpoints>
<webScriptEndpoint>
<standardEndpoint name="" crossDomainScriptAccessEnabled="true"/>
</webScriptEndpoint>
</standardEndpoints>
</system.serviceModel>
关于JSONP和WCF的更多信息可以找到。很抱歉迟到了-你不必使用JSONP,我将WCF与angularjs、jquery、移动应用程序等一起使用-并且永远不要使用JSONP 只需像下面这样装饰您的类和属性,它就会序列化
[DataContract]
public class MyCustomClass
{
[DataMemember]
public string Name { get; set;}
}
抱歉来晚了-你不必使用jsonp,我使用WCF与angularjs、jquery、移动应用程序等一起使用-而且从不使用jsonp 只需像下面这样装饰您的类和属性,它就会序列化
[DataContract]
public class MyCustomClass
{
[DataMemember]
public string Name { get; set;}
}