背景: – 我创建了一个WCF服务托管在我的本地系统IIS.服务公开GET / POST方法和跨域启用,也可以使用https访问.为了使其可访问,使用自签名证书.

测试: – 当我尝试做跨域ajax调用它可以工作正常的GET请求和POST请求(只有那些不接受数据作为json的post方法)在IE10 / Edge.我可以在chrome / FireBox浏览器中进行任何GET / POST请求的跨域调用.当contenttype:accept / json参数在ajax调用中传递时,只有IE 10 / Edge会导致跨域调用POST请求的问题.

研究: – 我读了很多博客/ mdn,并了解到IE不遵循宗教信仰的cors的规范.我知道cors规范不会因为哪些cors prelight中止而归因于custom header / header的值.

ajax请求的示例我正在做: –

var postDT = { "postValue": "test" };
        debugger;
        $.support.cors = true;
        $.ajax({
            type: "POST",data: JSON.stringify(postDT),url: "http://ateet3371/Service1.svc/postdata",contentType: "application/json; charset=utf-8",dataType: "JSON",processData: true,success: function (data) {
                 alert(data);
            },error: function (jqXHR,textStatus,errorThrown) {
                var a = jqXHR;
                alert(jqXHR + '---' + textStatus + '---' + errorThrown);
            }
        });

如果我删除了contentType:“application / json; charset = utf-8”,那么它会抛出错误的请求错误,否则它抛出访问被拒绝的错误.

而WCF中的方法实现是:

[OperationContract]
    [WebInvoke(Method = "POST",ResponseFormat = Webmessageformat.Json,UriTemplate = "PostResponseData")]
    string PostResponseData(PostDataTest postDT);

而数据通信是:

[DataContract]
public class PostDataTest
{
    private string post_value;

    // Apply the DataMemberAttribute to the property.
    [DataMember]
    public string postValue
    {

        get { return post_value; }
        set { post_value = value; }
    }
}

如果我使用方法PostUrl数据,那么ajax调用成功执行,并且如果ContentType:“Application / json”头被从请求中删除,则返回正确的结果.

[OperationContract]
    [WebInvoke(Method = "POST",RequestFormat = Webmessageformat.Json,UriTemplate = "PostUrlData/{value}")]
    string PostUrlData(string value);

我已经在WCF的Global.asax中的BeginRequest事件中编写代码来处理选项请求:

HttpContext.Current.response.addheader("Access-Control-Allow-Origin","*");
        if (HttpContext.Current.Request.HttpMethod == "OPTIONS" )
        { 
        //These headers are handling the "pre-flight" OPTIONS call sent by the browser
        HttpContext.Current.response.addheader("Access-Control-Allow-Methods","GET,POST,PUT,HEAD");
        HttpContext.Current.response.addheader("Access-Control-Allow-Credentials","true");
        HttpContext.Current.response.addheader("Access-Control-Allow-Headers","Origin,Content-Type,Accept,X-Requested-With,Session");
        HttpContext.Current.response.addheader("Access-Control-Expose-Headers","DAV,content-length,Allow" );
        HttpContext.Current.response.addheader("Access-Control-Max-Age","1728000" );
        HttpContext.Current.response.addheader("Cache-Control","no-cache,no-store");
        HttpContext.Current.Response.End();
        }

而且我无法在IE中启用允许跨域呼叫设置,因为最终用户不会执行此类步骤.

困扰问题: – 但是仍然无法在IE 10 / Edge中启用JSON数据(这是启用cors).

(已编辑)更新:
托管WCF的IIS站点仅启用匿名认证,而禁用其他身份验证.
即使我尝试使用https的有效证书,但仍然不适用于IE,但完美的Chrome.

请求头

选项https://service.domian.com/projectservice.svc/GetMultiListData HTTP / 1.1
接受:* / *
原产地:https://sitename.servicedomain.com
访问控制请求方法:POST
访问控制请求头:内容类型,接受
Accept-Encoding:gzip,deflate
User-Agent:Mozilla / 5.0(Windows NT 6.1; WOW64; Trident / 7.0; rv:11.0),如Gecko
主机:sitename.servicedomain.com
内容长度:0
连接:保持活力
缓存控制:无缓存

回应标题

HTTP / 1.1 200 OK
缓存控制:无缓存,无存储
服务器:Microsoft-IIS / 7.5
Access-Control-Allow-Origin:sitename.servicedomain.com
访问控制允许方法:GET,HEAD
Access-Control-Allow-Credentials:true
访问控制 – 允许标题:原始,内容类型,接受,X请求与会话
Access-Control-Expose-Headers:DAV,Allow
访问控制 – 最大年龄:1728000
X-Powered by:ASP.NET
日期:星期四,2016年8月04日17:26:27 GMT
内容长度:0

请帮我解决很多文章和博客,但仍然无法解决问题.
您的帮助将不胜感激!

专家请帮助我!

解决方法

客户端可以检查几件事情:

你试图覆盖$.support.cors.这是(或者是)意味着是一个可读的属性,告诉你如果浏览器支持CORS. (见jQuery source查看哪里)
>基于jQuery docs for ajax,您可能需要将xhrFields:{withCredentials:true}添加到$.ajax()选项中
>使用dataType的正确外壳:“json”和charset = UTF-8

在服务器端,您可能希望在Access-Control-Allow-Origin响应头中尝试回应特定的主机名(回显Origin标头)而不是通配符(*).这在MDN中具体提到了一个还讨论Access-Control-Allow-Credentials的段落:

Important note: when responding to a credentialed request,server must specify a domain,and cannot use wild carding. The above example would fail if the header was wildcarded as: Access-Control-Allow-Origin: *.

jquery – 发布JSON ajax请求,cors在IE10 / Edge中不起作用的更多相关文章

  1. jquery点赞功能实现代码 点个赞吧!

    点赞功能很多地方都会出现,如何实现爱心点赞功能,这篇文章主要为大家详细介绍了jquery点赞功能实现代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  2. 关于h5中的fetch方法解读(小结)

    这篇文章主要介绍了关于h5中的fetch方法解读(小结),fetch身为H5中的一个新对象,他的诞生,是为了取代ajax的存在而出现,有兴趣的可以了解一下

  3. ios – 使用NSURLSession获取JSON数据

    我试图从谷歌距离api使用NSURLSession获取数据,但如下所示,当我打印响应和数据时,我得到的结果为NULL.可能是什么问题?

  4. ios – 错误域= com.alamofire.error.serialization.response代码= -1011“请求失败:禁止

    任何人都可以帮我解决以下错误–>在AFNetworking2.5中使用“删除”方法时出错解决方法我发现,如果我的手机时钟不同步……它不允许我更新…也许检查你的手机设置到正确的时间“自动区”,看看是否有效…

  5. iOS网页/原生应用Facebook登录弹出 – 失败?

    如果我重新启动app/web-app,用户将自动登录,并重定向到成功页面.我认为是导致问题的原因当您在Firefox/Chrome/Safari浏览器中运行网页时,Facebook登录对话框会弹出一个弹出窗口或另一个选项卡.我相信这是这个弹出页面的一个问题,以及当成功登录时Javascript如何与自身通信.window.close的东西没有返回的根页面…失败的解决方法由于应用程序挂在前面提到的URL上,我决定在shouldStartLoadWithRequest(…)中添加if语句以强制UIWebvie

  6. ios – Watchkit新会话不起作用

    我的手表扩展中有两个视图控制器.每当我打电话时我只得到第一个视图控制器的响应,并在第二个viewcontroller中得到错误WCSession在app和watch扩展中启动.任何建议?

  7. 使用Firebase iOS Swift将特定设备的通知推送到特定设备

    我非常感谢PushNotifications的帮助.我的应用聊天,用户可以直接向对方发送短信.但是如果没有PushNotifications,它就没有多大意义.它全部设置在Firebase上.如何将推送通知从特定设备发送到特定设备?

  8. ios – 保存从查询中获取的用户的属性(即不在currentUser上)

    我有兴趣根据currentUser执行的操作将属性保存到数据库中的用户.基于以下代码,我收到错误消息“除非已通过logIn或signUp验证用户,否则无法保存用户”我想知道是否有一个解决方法,我可以将属性保存到foundUser,而无需登录该用户.谢谢你的帮助!解决方法如果要更新当前不是登录用户的用户,则需要使用主密钥调用Parse.您可以从CloudCode执行此操作;并从您的iOS项目中调用它;

  9. 在iOS中使用NSJSONSerialization进行JSON解析

    解决方法首先在您的JSON响应字典中,在“RESPONSE”键下,您有一个数组而不是字典,该数组包含字典对象.所以要提取用户名和电子邮件ID,如下所示

  10. Xcode:Alamofire获得String响应

    我是IOS开发的新手,目前正在与Alamofire学习网络我正在尝试登录…每当凭证正确时,.PHP文件返回一个json,我可以通过以下代码从Alamofire获取json:现在……当凭证错误时,.PHP不会给json..而且它返回一个字符串..例如“wrong_password”或“userLocked”等等……如何通过Alamofire获得String响应?解决方法如果您希望JSON响应使用.responseJSON,如果您想要String响应,请使用.responseString.如果你想两者同时使用

随机推荐

  1. jquery-plugins – 是否可以使用猫头鹰旋转木马实现循环/无限轮播?

    我正在使用猫头鹰旋转木马,它的工作完美,除了它不支持循环/无限滚动.我没有搜索google和stackoverflow的想法,没有运气.有没有人在猫头鹰旋转木马上实现圆形/无限滚动?

  2. jQuery动态输入字段焦点

    我想使用以下jQuery向我的页面动态添加一个输入字段:在这样做之后,我希望输入字段具有闪烁的文本光标的焦点,所以我想在创建后立即输入.有人可以告诉我我该怎么办?

  3. jquery – 为什么$(window).height()这样错了?

    我试图获取当前浏览器的视口高度,使用但我得到的价值观太低了.当视口高度高达850px时,我从height()获取大约350或400像素的值.这是怎么回事?

  4. jquery – 如果在此div之外和其他draggables内部(使用无效和有效的还原选项),则可拖动恢复

    例如这样但是由于明显的原因,这不行.我可以说这个吗?

  5. 创建一个jQueryUI 1.8按钮菜单

    现在jQueryUI1.8已经出来了,我正在浏览更新,并且遇到了新的Buttonwidget,特别是SplitButtonwithadropdown的演示之一.这个演示似乎表明Buttonwidget可以在这里创建一个下拉菜单.作为讨论的问题,我想知道使用这个新的Button小部件来创建一个下拉菜单有什么方法.干杯.解决方法您必须在按钮下方列出一个列表,方式类似于此处为自动完成提供的演示:http

  6. 灰色divs使用JQuery

    我试图使用这个代码:为了淡出一大堆名为MySelectorDiv的div,唯一的是,它只会淡出第一个而不是所有的div,为什么呢?

  7. 使用jQuery动态插入到列表中

    我有两个订单列表在彼此旁边.当我从一个列表中选出一个节点时,我想按照字母顺序插入到另一个列表中.抓住的是我想要把一个元素放在另一个列表中,而不刷新整个列表.奇怪的是,当我插入到右边的列表中,它工作正常,但是当我插入到左边的列表中时,顺序永远不会出来.我也尝试将所有内容读入数组,并将其排序在一起,以防止children()方法没有按照显示顺序返回任何东西,但是我仍然得到相同的结果.这是我的jQuer

  8. 没有回应MediaWiki API使用jQuery

    我试图从维基百科获取一些内容作为JSON:但我没有回应.如果我粘贴到浏览器的地址栏,就像我得到预期的内容.怎么了?解决方法您需要通过添加&callback=?来触发具有$.getJSON()的JSONP行为?在querystring上,像这样:Youcantestithere.没有使用JSONP,你正在击中same-originpolicy,阻止XmlHttpRequest获取任何数据.

  9. jQuery Ajax请求每30秒

    我有这段代码,但是有些人在我的网站上的值可能会改变.我需要每30秒钟更新一次#financediv.这可以做吗解决方法您可以将代码放在单独的函数中,如下所示:然后每30秒建立一个定时器调用该函数:祝你好运!总结以上是DEVMAX为你收集整理的jQueryAjax请求每30秒全部内容。如果觉得DEVMAX网站内容还不错,欢迎将DEVMAX网站推荐给好友。

  10. jquery – keypress事件在IE和Chrome中不工作,但在FF工作

    任何想法为什么会这样发生?我通常认为Chrome会更加宽容代码?这是我的按键键.我错过了什么吗?右图();和leftimage();是应该工作的功能,因为我在其他地方使用这些功能谢谢您的帮助!

返回
顶部