Javascript 带有JSONP的WCF Restful服务(Windows身份验证)
我有一个使用Windows身份验证设置的WCF RESTful服务,它工作正常。现在我想为跨域访问启用它,因此我将我的js更改为以下内容:Javascript 带有JSONP的WCF Restful服务(Windows身份验证),javascript,wcf,rest,jsonp,Javascript,Wcf,Rest,Jsonp,我有一个使用Windows身份验证设置的WCF RESTful服务,它工作正常。现在我想为跨域访问启用它,因此我将我的js更改为以下内容: $.ajax({ type: "GET", url: "http://www.example.com/MyService.svc/GetData", contentType: "application/javascript", dataType: "jsonp",
$.ajax({
type: "GET",
url: "http://www.example.com/MyService.svc/GetData",
contentType: "application/javascript",
dataType: "jsonp",
async: false,
success: function (data) {
alert($.parseJSON(data));
},
error: function (ex) {
throw ex;
}
});
在ChromeDeveloper的工具中,在网络选项卡下,我可以看到请求有一个200状态代码,在响应选项卡中,我可以看到返回的数据。然而,在我的javascript中,从未调用成功块。它与错误一起进入错误块:
Uncaught #<Object>
$.ajax.error
x.Callbacks.c
x.Callbacks.p.fireWith
k
x.ajaxTransport.send.n.onload.n.onreadystatechange
未捕获#
$.ajax.error
x、 回调
x、 Callbacks.p.fireWith
K
x、 ajaxTransport.send.n.onload.n.onreadystatechange
我缺少什么?如果将contenttype更改为“application/json;charset=utf-8”不能解决问题,那么您可以尝试以下代码:
$.ajax({
isPostBack: false,
type: "GET",
url: "http://www.example.com/MyService.svc/GetData",
async: false,
cache: false,
type: 'POST',
contentType: "application/json; charset=utf-8",
data: '{}',
dataType: 'json',
crossDomain: true,
success: function (data) {
alert($.parseJSON(data));
},
error: function (ex) {
throw ex;
}
});
如果您想为跨域访问启用它,那么您应该在global.asax.cs文件中包含以下代码
protected void Application_BeginRequest(object sender, EventArgs e)
{
EnableCrossDmainAjaxCall();
}
private void EnableCrossDmainAjaxCall()
{
HttpContext.Current.Response.AddHeader("Access-Control-Allow-Origin", "*");
if (HttpContext.Current.Request.HttpMethod == "OPTIONS")
{
HttpContext.Current.Response.AddHeader("Cache-Control", "no-cache");
HttpContext.Current.Response.AddHeader("Access-Control-Allow-Methods", "POST");
HttpContext.Current.Response.AddHeader("Access-Control-Allow-Headers", "Content-Type, Accept");
HttpContext.Current.Response.AddHeader("Access-Control-Max-Age", "1728000");
HttpContext.Current.Response.End();
}
}
您可以编写ajax调用函数,代码如下:
$.ajax({
isPostBack: false,
type: "GET",
url: "http://www.example.com/MyService.svc/GetData",
async: false,
cache: false,
type: 'POST',
contentType: "application/json; charset=utf-8",
data: '{}',
dataType: 'json',
crossDomain: true,
success: function (data) {
alert($.parseJSON(data));
},
error: function (ex) {
throw ex;
}
});
我认为contentType应该是“application/json;charset=utf-8”。