zoukankan      html  css  js  c++  java
  • 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  

  • 相关阅读:
    学PHP应注意的问题与知识点
    php 的生命周期
    Pyhton中汉字的使用方法(转)
    院外培训:GIS数据处理与建模高级培训班学习心得体会 来自
    绕人的python汉字问题
    arcmap导出或者打印时插入的图片和对象绘制失败
    【百度地图API】如何获取行政区域的边界? (转)
    VS2010不能编译.Net3.5项目的解决方法(转)
    ArcGIS中Python汉字使用说明(转)
    ArcGIS10联网无法启动问题解决
  • 原文地址:https://www.cnblogs.com/mushishi/p/5374484.html
Copyright © 2011-2022 走看看