我使用声明如下的方法
创建了一个WCF服务[OperationContract]
[WebInvoke(UriTemplate="getDashBoard", Method="POST", BodyStyle=WebMessageBodyStyle.WrappedRequest, RequestFormat=WebMessageFormat.Json, ResponseFormat=WebMessageFormat.Json)]
getDashBoard object (string strGroups);
返回
List<Dictionary String, Object> rows = new List<Dictionary String, Object>();
由JavaScriptSerializer序列化
serializer.Serialize ( rows) ;
客户端我以这种方式调用webservice方法
$.ajax ({
type: " POST" ,
url: url ,
headers : {" Access -Control- Allow- Origin" , " *", " Access -Control- Request- Method" , " POST "},
dataType : " json " ,
contentType : "application / json ; charset = utf -8" ,
date : ' {" strGroups ": " ISPB "} ' ,
success : function ( data) {
var content = JSON.parse ( data);
$.each(content, function(i, item) {
console.log(i) ;
});
},
error: function (jqXHR, textStatus, errorThrown) {
alert(" getDashBoard " + textStatus) ;
}
});
使用Firefox,对WS的调用会返回此错误&#34; NetworkError:405方法不允许。锁定请求多原语(交叉源):原点的标准不允许读取远程资源http:// ....您可以通过在同一域上移动资源或激活CORS来解决问题。 &#34;
用调试器IE返回数据显示格式正确且对象&#34;内容&#34;拥有所有正确的价值;但循环不起作用:它返回&#34;字符无效&#34;
帮助meeeeee! 我绝望了:o
谢谢Cinzia
答案 0 :(得分:0)
试试这个:
$.ajax ({
type: " POST" ,
url: url ,
crossDomain : true,
dataType : " json " ,
date : ' {" strGroups ": " ISPB "} ' ,
success : function ( data) {
var content = JSON.parse ( data);
$.each(content, function(i, item) {
console.log(i) ;
});
},
error: function (jqXHR, textStatus, errorThrown) {
alert(" getDashBoard " + textStatus) ;
}
});
答案 1 :(得分:0)
您必须在服务器站点上的WCF服务上激活CORS
。 CORS用于获取same-origin-policy。 Here是一个很好的资源。
基本上你首先要添加一个消息检查器,然后你必须将CORS-Heder添加到响应中:
requiredHeaders.Add("Access-Control-Allow-Origin", "*");
requiredHeaders.Add("Access-Control-Request-Method", "POST,GET,PUT,DELETE,OPTIONS");
requiredHeaders.Add("Access-Control-Allow-Headers", "X-Requested-With,Content-Type");
endpointDispatcher.DispatchRuntime.MessageInspectors.Add(new CustomHeaderMessageInspector(requiredHeaders));
IE和FF中的不同行为来自FF(description)的预检OPTIONS
调用。如果在WCF服务上启用CORS(如上所述),它应该适用于两种浏览器。
作为替代方案,您可以在同一个域上运行服务调用,但这取决于您的要求。
答案 2 :(得分:0)
非常感谢您的回答。 问题是即使我在相同的域上工作我也有同样的错误&#34; SCRIPT1014:无效的字符&#34;在
$.each(content, function(i, item) {
console.log(i) ;
});
如果我删除关于循环的行代码,IE会显示数据返回如下:
[{&#34; DESCR&#34;:&#34;雅卓&#34;&#34; percValore&#34;:0.003},{&#34; DESCR&#34;:&#34;雅卓2&#34;&#34; percValore&#34;:0.100}]
看来是对的! FireFox什么都不显示! 也许问题不是跨域而是响应? 谢谢Cinzia