jquery跨域调用wcf

使用jquery跨域调用wcf服务的时候会报如下错误

 1         $.ajax({
 2             url: 'http://localhost:28207/Service1.svc/GetData',
 3             method: 'get',
 4             dataType: 'json',  
 5             data: { value: val },
 6             success: function (data) {
 7                 $("label").text("success: " + data);
 8             },
 9             error: function (err) {
10                 $("label").text("error: " + err);
11             }
12         });

之前一直以为跨域的请求只要调用方做修改就可以的,实际解决问题的时候发现服务端wcf的binding配置也需要支持

一、wcf服务端配置
  1.  需要将配置中webHttpBinding属性crossDomainScriptAccessEnabled置为true

   2. 接口得支持GET方式调用 ,因为jquery跨域请求时候的方式就是get

 1  [ServiceContract]
 2     public interface IService1
 3     {
 4         // 跨域调用的话得支持GET方式
 5         [WebInvoke(Method = "GET",
 6             RequestFormat = WebMessageFormat.Json,
 7             ResponseFormat = WebMessageFormat.Json,
 8             BodyStyle = WebMessageBodyStyle.Bare,
 9             UriTemplate = "/GetData?value={value}")]
10         string GetData(int value);
11     }
二、客户端调用

以jsonp的方式调用,表明是跨域请求

 1    var val = $("#txtValue").val();
 2         //  jquery跨域调用jsonp方式 
 3         //  jquery会自动填充callback=?中的问号 
 4         //  实际调用时请求的url是 http://localhost:28207/Service1.svc/GetData?callback=jQuery1102023912459355778992_1460275935452&value=321&_=1460275935453
 5 
 6         $.ajax({
 7             url: 'http://localhost:28207/Service1.svc/GetData',
 8             method: 'get', //这个可以去掉, 因为jsonp默认就是get方式
 9             dataType: 'jsonp',  
10             data: { value: val },
11             success: function (data) {
12                 $("label").text("success: " + data);
13             },
14             error: function (err) {
15                 $("label").text("error: " + err);
16             }
17         });
三、结果

 

可以看到jquery的jsonp跨域调用自动给我们添加一个 callback参数,提供给服务端回调的。

 

示例代码

 

跨域也可以通过W3C的一个标准CORS(Cross-Origin Resource Sharing) 跨域资源共享来实现的;

这个标准需要浏览器和服务器同时支持, 就像我上面的例子服务端开启配置(不同的服务框架有不同的设置,也可以直接iis上设置Access-Control-x 等响应头)并且chrome浏览器支持;

参考:   http://www.ruanyifeng.com/blog/2016/04/cors.html  

转载于:https://www.cnblogs.com/mushishi/p/5374484.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值