调用使用jQuery AJAX的WCF服务(Calling a WCF service with j

2019-10-20 03:37发布

我创建了一个方法的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不允许的方法锁定请求multiorigine(交叉原点):原产地的标准不允许远程资源HTTP的读取:// ....你可以通过移动资源在同一个域或激活CORS解决的问题......“。

与调试器IE返回数据出现正确格式化和对象“内容”具有的所有正确的值; 但周期不能正常工作:它返回“字符无效”

帮助meeeeee! 我很绝望:○

由于CINZIA

Answer 1:

尝试这个 :

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

});



Answer 2:

你必须激活CORS在服务器网站上的WCF服务。 CORS是用来获取约于同源策略 。 下面是关于这一个很好的资源。

基本上,你首先必须添加一个消息检查,后来就得了CORS,赫德添加到响应:

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的递延行为来自预检OPTIONS从FF(呼叫描述 )。 如果启用您的WCF服务CORS(如前述),它应该在这两个浏览器。

作为替代方案可以运行在同一个域的服务电话,但是这取决于您的要求。



Answer 3:

非常感谢您的回答。 问题是,即使我在同一个域的工作我有同样的错误“SCRIPT1014:无效字符”上

$.each(content, function(i, item) {
        console.log(i) ;
    });

如果我删除有关的周期行代码,IE显示我返回数据如下:

[{ “DESCR”: “其他”, “percValore”:0003},{ “DESCR”: “其他2”, “percValore”:0100}]

它似乎是正确的! Firefox不显示什么! 也许问题不是跨域但响应? 谢谢CINZIA



文章来源: Calling a WCF service with jQuery ajax