使用jQuery ajax调用WCF服务



我创建了一个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的调用返回这个错误"NetworkError: 405 Method Not Allowed"。锁定请求多源(跨源):源的标准不允许读取远程资源http://....你可以解决这个问题……通过移动同一域中的资源或激活CORS。"

用调试器IE返回的数据显示格式正确且对象"content"具有所有正确的值;但是循环不起作用:它返回"字符无效"

救命!我绝望了:o

由于Cinzia

try this:

$.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) ;
}

});

您必须在服务器站点上的WCF服务上激活CORS。CORS用于绕过同源策略。这里有一个很好的资源。

基本上你必须首先添加一个消息检查器,然后你必须添加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的预飞行OPTIONS调用(描述)。如果您在WCF-Service上启用CORS(如上所述),它应该在两个浏览器中都能工作。

作为一种选择,您可以在同一域中运行您的服务调用,但这取决于您的需求。

非常感谢您的回答。问题是,即使我在同一个域中工作,我也会在

上出现相同的错误"SCRIPT1014:无效字符"。
$.each(content, function(i, item) {
        console.log(i) ;
    });

如果我删除了关于循环的行代码,IE会显示如下返回的数据:

[{"备注说明":"Altro"、"percValore":0.003},{"备注说明":"Altro 2","percValore":0.100}]

似乎是正确的!!FireFox什么都没显示!也许问题不在于跨域,而在于响应?谢谢你,Cinzia

相关内容

  • 没有找到相关文章

最新更新