2014-05-20 115 views
1

我創建了聲明的方法WCF服務如下調用使用jQuery AJAX的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方法不允許。鎖定的請求多源(交叉源):源的準則不允許讀取遠程資源http:// ....您可以通過移動相同域上的資源或激活CORS來解決問題。 「

與調試器IE返回的數據顯示爲正確的格式和對象‘內容’擁有所有正確的價值觀;但週期不能正常工作:它返回‘字符無效’

幫助meeeeee ! ,我渴望:○

感謝CINZIA

回答

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

});

0

您必須在服務器站點上的WCF服務上激活CORS。 CORS用於獲得圍繞same-origin-policyHere是一個很好的資源。

基本上,你首先必須添加一個消息檢查,後來就得了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的遞延行爲來源於從FF的預檢OPTIONS通話(description)。如果您在WCF服務上啓用CORS(如上所述),它應該可以在兩個瀏覽器中使用。

作爲替代方案,您可以在同一個域上運行服務調用,但這取決於您的要求。

0

非常感謝您的回答。 的問題是,即使我在同一個域的工作我有同樣的錯誤「SCRIPT1014:無效字符」上

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

,如果我刪除有關的週期行代碼,IE顯示我返回數據如下:

[{ 「DESCR」: 「雅卓」, 「percValore」:0.003},{ 「DESCR」: 「雅卓2」, 「percValore」:0.100}]

似乎正確! FireFox不顯示任何東西! 也許問題不是跨域而是響應?謝謝Cinzia