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

         $.ajax({
url: 'http://localhost:28207/Service1.svc/GetData',
method: 'get',
dataType: 'json',
data: { value: val },
success: function (data) {
$("label").text("success: " + data);
},
error: function (err) {
$("label").text("error: " + err);
}
});

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

一、wcf服务端配置

  1. 需要将配置中webHttpBinding属性crossDomainScriptAccessEnabled置为true

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

  [ServiceContract]
public interface IService1
{
// 跨域调用的话得支持GET方式
[WebInvoke(Method = "GET",
RequestFormat = WebMessageFormat.Json,
ResponseFormat = WebMessageFormat.Json,
BodyStyle = WebMessageBodyStyle.Bare,
UriTemplate = "/GetData?value={value}")]
string GetData(int value);
}

二、客户端调用

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

    var val = $("#txtValue").val();
// jquery跨域调用jsonp方式
// jquery会自动填充callback=?中的问号
// 实际调用时请求的url是 http://localhost:28207/Service1.svc/GetData?callback=jQuery1102023912459355778992_1460275935452&value=321&_=1460275935453 $.ajax({
url: 'http://localhost:28207/Service1.svc/GetData',
method: 'get', //这个可以去掉, 因为jsonp默认就是get方式
dataType: 'jsonp',
data: { value: val },
success: function (data) {
$("label").text("success: " + data);
},
error: function (err) {
$("label").text("error: " + err);
}
});

三、结果

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

示例代码

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

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

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

jquery跨域调用wcf的更多相关文章

  1. 实现jquery.ajax及原生的XMLHttpRequest跨域调用WCF服务的方法

    关于ajax跨域调用WCF服务的方法很多,经过我反复的代码测试,认为如下方法是最为简便的,当然也不能说别人的方法是错误的,下面就来上代码,WCF服务定义还是延用上次的,如: namespace Wcf ...

  2. jQuery跨域调用WebService

    jQuery跨域调用WebService举例html: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN&qu ...

  3. jQuery跨域调用Web API

    我曾经发表了一篇关于如何开发Web API的博客,链接地址:http://www.cnblogs.com/guwei4037/p/3603818.html.有朋友说开发是会开发了,但不知道怎么调用啊? ...

  4. 一个通过JSONP跨域调用WCF REST服务的例子(以jQuery为例)

    JSONP(JSON with Padding)可以看成是JSON的一种“使用模式”,用以解决“跨域访问”的问题,这篇简单的文章给出一个简单的例子用于模拟如何通过jQuery以JSONP的访问调用一个 ...

  5. Jquery跨域调用

    今天在项目中须要做远程数据载入并渲染页面,直到开发阶段才意识到ajax跨域请求的问题,隐约记得Jquery有提过一个ajax跨域请求的解决方式,于是即刻翻出Jquery的API出来研究,发现JQuer ...

  6. Jquery跨域调用后台方法

    //前端JS function CallHandlerByJquery() { var url = "http://" + window.location.hostname + & ...

  7. Ajax跨域访问wcf服务中所遇到的问题总结。

    工具说明:vs2012,sql server 2008R2 1.首先,通过vs2012建立一个wcf服务项目,建立好之后.再新开一个vs2012 建立web项目,通过jQuery的ajax方法访问服务 ...

  8. jquery Ajax跨域调用WebServices方法

    由于公司需要开发一个手机页面,想提供给同事直接在手机上可以查询SAP资料.数据需要使用js调用webserver来获取. 因为初次使用Jquery调用Webserver,所以期间并不顺利.测试调用We ...

  9. jquery ajax jsonp跨域调用实例代码

    今天研究了AJAX使用JSONP进行跨域调用的方法,发现使用GET方式和POST方式都可以进行跨域调用,这里简单分享下,方便需要的朋友 客户端代码 复制代码 代码如下: <%@ Page Lan ...

随机推荐

  1. JDK错误

    WARN org.mortbay.log: Failed to read file: /usr/lib/jvm/jdk1.8.0_66/jre/lib/ext/._cldrdata.jar 删除._c ...

  2. 使用kendoui对grid指定行变色

    关键点在于绑定数据源后进行判断,可直接获取当前绑定对象的属性 dataBound: function () { dataView = this.dataSource.view(); ; i < ...

  3. windows Phone 浏览器窗口的尺寸

    移动设备的屏幕一般都比PC小很多,移动设备的浏览器会将一个较大的  “虚拟”  窗口映射到移动设备的屏幕上,然后按一定的比例(3:1或2:1)进行缩放.也就是说当我们加载一个普通网页的时候,移动浏览器 ...

  4. java.lang.IllegalArgumentException

    org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.exceptions.Persiste ...

  5. Calendar的add()方法介绍

    [java] view plaincopy public static Date addYears(Date date, int amount) { return add(date, 1, amoun ...

  6. 二模09day1解题报告

    T1.词编码(word) 给出一些原长为n的01串经过变化后的串求原串.原串的特点是:各个1的位置号和%(n+1)==0 变法(只取其一): 改一个0为1 删一个 加一个 不变. 其中2优先考虑位置靠 ...

  7. Windows API学习---用户方式中的线程同步

    前言 当所有的线程在互相之间不需要进行通信的情况下就能够顺利地运行时, Micrsoft Windows的运行性能最好.但是,线程很少能够在所有的时间都独立地进行操作.通常情况下,要生成一些线程来处理 ...

  8. 手机h5 页面 iPhone 下 手机号码 蓝色字体 黑色字体

    在手机端 苹果系统下 手机号码会变成蓝色的 ,如何不让手机号变成蓝色  黑色 或者其他颜色 , 苹果真是的 原因是识别成了电话号码,然后成为了链接.解决方法: 更改链接的颜色 a{ color: re ...

  9. Recover deleted pictures in iOS 9

    A case about business secret. The suspect is an engineer in Hitec company, and compeitiors pay lots ...

  10. 一、Linux目录结构

    转自:http://www.cnblogs.com/JCSU/articles/2770249.html 你想知道为什么某些程序位于/bin下,或者/sbin,或者/usr/bin,或/usr/sbi ...