ajax跨域问题

ajax 跨域访问数据,ie9和ie8接收不到数据
用angular的http也是一样 是不是都是因为跨域所以才这样
有啥解决办法吗

阅读 3.4k
5 个回答

第一选择JSONP,如果不能使用需要检查是否是http/https的原因,需要注入网站和jsonp地址都是http或者https.

更复杂的逻辑可以选择下面的:
需要前后台都加以配合,并且https|http保持一致:
前端:

function ajax(url,data) {
    var request = new XMLHttpRequest();
    request.addEventListener("load", function () {
        if (request.status == 200) {
           //请求成功,处理业务
        } else {
            if (opts.error) {
               //请求失败了
            }
        }
    }, false);
    request.addEventListener("error", function () {
        console.log('出错了');
    }, false);
    request.addEventListener("abort", function () {
        console.log('中断了');
    }, false);

  
    request.open("POST"), url, true);
    request.setRequestHeader("X-Requested-With", "XMLHttpRequest");
   
        var fromData = new FormData();
        for (var k in data) {
            fromData.append(k, opts.data[k]);
        }
        request.send(fromData);
    

}

后端,PHP为例:

    header("Access-Control-Allow-Origin: *");
    header("Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept");
    //具体业务逻辑

如果你当前的网页是http的,那么被请求的http也应该是http,反之https也是一样的

我只知道跨域的话 ajax的类型直接用jsonp 他是为跨域而生的,在后台要设置一下消息的请求头

接受不到数据的化你看一下后台报错和返回的状态码 是404还是200还是其他状态码
如果你收到了状态码200且无法接收到数据很可能是你跨域写的有问题
如果404可能你请求路径有问题
5开头是你服务器写的有问题
如果是跨域问题的话 你就解决跨域问题
比如jsonp CROS等
AJAX 是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术 本身是不解决跨域的
如果你没遵守同源策略肯定会出现跨域问题
推荐你一下文章:http://www.ruanyifeng.com/blo...

在IE9及以下,ajax的跨域是有兼容性的,应该是只有post才有的,get应该是没有问题的,在post中请求头部加上:crossDomain: true == !(document.all)在$.ajax({})

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏