博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
关于AJAX的跨域问题
阅读量:5299 次
发布时间:2019-06-14

本文共 1712 字,大约阅读时间需要 5 分钟。

最近过年的这几天在做毕业设计的时候遇到了一个关于AJAX的跨域问题,本来我是想要用一下聚合数据平台提供的天气预报的接口的,然后做一个当地的天气情况展示,但是在使用AJAX的时候,被告知出现错误了。

这是由于浏览器的同源策略引起的,那么什么是同源策略呢,同源策略就是在不同域下请求另一个页面中的数据时,这是不被允许的。也就是会出现上面的问题。

那么什么是不同域呢。一个域名地址的组成有以下几个部分:协议、子域名、主域名、端口号、请求资源地址。

例如:http://www.abc.com:8080/server.php/这个域名地址。

这里的http://就是协议。

www就是子域名

abc.com就是主域名

8080就是端口号

server.php就是请求资源地址

只要以上的协议、子域名、主域名、端口号有一个不同,就算做不同域。不同域之间的互相请求资源就是跨域请求。那么怎么来解决这个跨域问题呢?,这里我收集了三个方法,分别是利用代理、jsonp、xhr2。

1、使用代理:因为我这里使用的后台语言是php,所以我这里就只是找到了php相关的代码。

2、使用jsonp,说道jsonp就不得不说下json了,他是一种轻量级的数据交换格式,它采用了完全独立于语言的文本格式,也就是说不论是任何语言都可以解析json数据,只要按照json的规则来就行。那么json的大概的结构如下:

{    "user": [{        "name": "张三",        "age": 20,        "sex": "male"    }, {        "name": "李四",        "age": 25,        "sex": "male"    }, {        "name": "翠花",        "age": 18,        "sex": "female"    }]}

那么什么是jsonp呢,jsonp是一种json的使用模式,他就是为了解决各大主流浏览器之间的跨域问题而出现的,使用jsonp所抓取的并不是json,而是任意的JavaScript代码,然后利用JavaScript直译器执行而不是利用json解析器解析。

$.ajax({            type:'GET',            url:"http://op.juhe.cn/onebox/weather/query?cityname=成都&key=ecf1aeb200fe2eb300a68a4e5a1a0d46",            dataType:'jsonp',            jsonp:'callback',            success:function(data){                console.log(data);            }        });

3、使用xhr2,这里的xhr2是HTML5提出的新功能,XMLHttPRequest Level2已经实现了各大浏览器之间的跨域问题、但是在IE10以下的版本都不被支持。使用这个方法解决跨域问题很简单,只需要在服务器页面添加两行代码就OK。

后台php代码:

'张三','age'=>24,'sex'=>'male'), array('name'=>'李四','age'=>22,'sex'=>'male'), array('name'=>'翠花','age'=>20,'sex'=>'female'));echo json_encode($arr);?>

前端代码:

$.get('http://127.0.0.1/AJAX/xhr2.php',function(data){    console.log(data);});

浏览器控制台输出结果:

好了以上就是我找到的解决ajax跨域问题的方法,今天就先写到这里。

转载于:https://www.cnblogs.com/ww-ervin-72/p/5199210.html

你可能感兴趣的文章
关于窗口Y坐标的小问题
查看>>
java b组 小计算器,简单计算器..
查看>>
php server port,$_SERVER[‘SERVER_PORT’]关于php5.2一个bug
查看>>
php 类 init,PHP内核探索:类的定义
查看>>
java的二叉树树一层层输出,Java构造二叉树、树形结构先序遍历、中序遍历、后序遍历...
查看>>
php 循环套 重复,php 循环套循环 出现重复数据
查看>>
mysql distince,MySQL学习(未完待续)
查看>>
php libevent 定时器,PHP 使用pcntl和libevent实现Timer功能
查看>>
对数字进行 混淆 php,解密混淆的PHP程序
查看>>
zencart不支持php7的原因,Zen Cart1.3.8产品页报错提示:Deprecated: Function ereg_replace() is deprecated...
查看>>
php仿阿里巴巴,php实现的仿阿里巴巴实现同类产品翻页
查看>>
matlab fis编辑器在哪,基本FIS编辑器
查看>>
linux的串口子系统,TTY子系统
查看>>
修改linux远程22端口,linux修改ssh远程端口22
查看>>
Linux系统的创始者,组图:Linux之父的办公室首度曝光
查看>>
关于linux的环境变量设置,linux环境变量设置
查看>>
socket模块,简单的套接字,加循环
查看>>
个人主页优化(2)
查看>>
Node 中异常收集与监控
查看>>
7、学习大数据笔记-hadoop fs 命令
查看>>