zoukankan      html  css  js  c++  java
  • ajax withCredentials在firefox下问题的解释

    1,起因:

        跨域的问题一般有两种解决方式比较常用,一是使用jsonp,二是服务端配置cors策略。

    2,cors跨域产生的问题

     默认的情况下,cors做到跨域之后是没有供应凭证(cookie、HTTP认证及客户端SSL证实等)(童鞋们都有牵扯到cookie吧,如果大神的网站一丁点都不占cookie的,此文略过)。重点来了,我们可以使用ajax配置项 withCredentials来解决这个问题,下来分别看看原生xhr和jquery的ajax是怎么做配置的:  

    //原生的配置
    var xhr = new XMLHttpRequest();
    xhr.open('GET', 'http://www.xxx.com/api');
    xhr.withCredentials = true;
    xhr.async=false; xhr.onload
    = onLoadHandler; xhr.send();
    //jquery ajax配置
    $.ajax({
                type: "GET",
                url: 'data/tree.json',
    async:false, xhrFields: { withCredentials: true } }).done(function(data) { console.log(data); });

    但是!!!!在火狐浏览器中你会发现报错了

    也就是说在启用同步模式的ajax后,在火狐浏览器中withCredentials配置是并不起作用的,并且不能正常返回数据,导致我们的请求“失败!”

    解决方案:

    jquery配置模式需要修改:

    $.ajax({
                type: "GET",
                dataType: "json",
                url: 'data/tree.json',
                beforeSend: function(xhr) {
                    xhr.withCredentials = true;
                }
            }).done(function(data){
             console.log(data);
    });

    将withCredentials配置写进beforeSend函数,就可以解决了

  • 相关阅读:
    第四次作业
    第三次作业
    Java.14
    Java.13
    JAVA.12
    JAVA.11
    JAVA.10
    JAVA.9
    JAVA.8
    JAVA.7
  • 原文地址:https://www.cnblogs.com/Brose/p/cors_ajax_withCredentials_firefox.html
Copyright © 2011-2022 走看看