我有这个错误
XMLHttpRequest无法加载
http://localhost:81/Test/Service.svc/SetJSON
。 Access-Control-Allow-Origin不允许原点http://localhost:1716
。
当我使用jquery调用wcf web服务时。
$.ajax({
type: 'POST',
url: webmethod,
data: '{"data":"Darshana"}',
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (msg) {
alert(msg.d);
},
error: function (e) {
alert("Unavailable");
}
});
为什么会这样?
任何帮助。感谢名单..
答案 0 :(得分:3)
基本上,因为您正在访问不同的端口,所以它不在同一个origin上。
您需要在端口1716上运行的服务上启用跨源资源共享。
在不知道您要执行的操作的情况下,可以使用this之类的配置:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.webServer>
<httpProtocol>
<customHeaders>
<add name="Access-Control-Allow-Origin" value="*" />
</customHeaders>
</httpProtocol>
</system.webServer>
</configuration>
应该允许您进行测试,但对于生产,建议将相应的域列入白名单而不是使用通配符。
答案 1 :(得分:2)
不同的端口,尝试设置dataType: 'jsonp'
答案 2 :(得分:1)
我通过Apache mod_proxy模块解决了这个问题。启用模块:
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so
然后添加:
ProxyPass /your-get-url/ http://localhost:1716/
最后,将proxy-url传递给您的脚本。
答案 3 :(得分:1)
我不记得我是怎么得到这个错误的。但是,由于很多人遇到这个问题我想发布我所做的事情。
WCF - IService
[OperationContract]
[WebGet(BodyStyle = WebMessageBodyStyle.Bare,
RequestFormat = WebMessageFormat.Json,
ResponseFormat = WebMessageFormat.Json,
UriTemplate = "SetJSON?data={data}")]
string SetJSON(string data);
WCF - 服务
[AspNetCompatibilityRequirements(RequirementsMode =
AspNetCompatibilityRequirementsMode.Allowed)]
public class Service : IService
{
public string SetJSON(string data)
{
return data;
}
}
WCF - web.config
<system.serviceModel>
<bindings>
<webHttpBinding>
<binding name="webHttpBindingWithJsonP"
crossDomainScriptAccessEnabled="true" />
</webHttpBinding>
</bindings>
....
<services>
<service name="RnDService.Service">
<endpoint address="" behaviorConfiguration="webHttpBehavior"
binding="webHttpBinding"
bindingConfiguration="webHttpBindingWithJsonP"
contract="RnDService.IService" />
</service>
</services>
Jquery调用
$.ajax({
type: "GET",
url: "http://localhost:81/Test/Service.svc/SetJSON?data=" + "{ \"dl\":" + datalist + " }",
contentType: "application/json; charset=utf-8",
dataType: "jsonp",
success: function (data) {
alert(data.toString());
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
debugger;
alert("Error Occured!");
}
});
不是100%确定是什么解决了我的问题。无论如何,这将有助于某人。 :)
答案 4 :(得分:0)
如果你在Angular.js中使用localhost:port,那么请确保你像这样转义你的端口号:
var Project = $resource(
'http://localhost\\:5648/api/...',
{'a':'b'},
{
update: { method: 'PUT' }
}
);
答案 5 :(得分:-1)
我写了blog post (Accessing JSON data from a “local” data source is not permitted),这本质上是zenio的解决方案,但是有一步一步的指示。您在Apache中设置了反向代理,以便将本地URL转发到承载JSON数据的端口(基本上,将其转发到“远程”数据源)。