php中ajax跨域请求---小记
php中ajax跨域请求---小记
前端时间,遇到的一个问题,情况大约是这样:
原来的写法:
前端js文件中:
$.ajax({
type:'get',
url:'http://wan.xxx.com/xxx.js',
success:function(data){
.........
}
})
很简单的一个ajax请求;后面在做迁移的时候,由于系统目录的安排,js文件放到了,img.xxx.com域名下,这样就设计到了跨域问题,于是就改成了这样:
$.ajax({
type:'get',
url:'http://img.xxx.com/xxx.js',
dataType:'jsonp',
success:function(data){
.........
}
})
用jsonp的形式,跨域请求,这本来没有什么,很简单的,可这样请求后,就是得不到数据,不知道大家能不能看出问题所在?
跨域请求嘛,就是 dataType用jsonp的格式就对了,可就是不行。。。
后面想了一会,依然无解,后经过同学的帮助,才知道是这个问题:
跨域请求,需要有一个callback的回调函数,可是上边请求的url中,虽然是请求的另一个域中的文件,可并没有回调函数(请求的是另个域中的js文件,并没有回调函数);
所以,解决方法也就是,通过后台程序,写个回调函数即可,而要求必须要请求那个js文件得到json数据,
所以需要后台的方法代理一下请求,从而实现要求,就是做一个后台的代理
所以修改方法如下:
js文件中:
$.ajax({
type:'get',
url:'http://test.com/1.php', //请求的后台代理文件
data:'url=http://img.xxx.com/xxx.js', //传递请求的js地址
dataType:'jsonp',
success:function(data){
........
}
})
后台代理文件中:
1.php
url=_REQUEST[url];
$ch=curl_init();
curl_setopt(ch,CURLOPTURL,url);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);
curl_setopt($ch,CURLOPT_TIMEOUT_MS,200);
data=curlexec(ch); //$data即为请求传递过来的url得到的json数据
curl_close($ch);
echo _REQUEST['callback'].."('{data}');";
这样就可以实现功能,只不过多了一步后台代理的步骤;
顺便记一下:
ajax中的跨域的几个参数:
jsonp String
在一个jsonp请求中重写回调函数的名字。这个值用来替代在"callback=?"这种GET或POST请求中URL参数里的"callback"部分,比如{jsonp:'onJsonPLoad'}会导致将"onJsonPLoad=?"传给服务器。
jsonpCallback String
为jsonp请求指定一个回调函数名。这个值将用来取代jQuery自动生成的随机函数名。这主要用来让jQuery生成度独特的函数名,这样管理请求更容易,也能方便地提供回调函数和错误处理。你也可以在想让浏览器缓存GET请求的时候,指定这个回调函数名。
自己的简单记录。。。
php中ajax跨域请求---小记的更多相关文章
- ThinkPHP 5 中AJAX跨域请求头设置方法
最近用thinkphp做项目,在测试环境时,存在接口的测试问题.在tp官网也没能找到相关的解决方法.自已看了一下源码,有如下的解决方案. 在项目目录下面,创建common/behavior/CronR ...
- Laravel中的ajax跨域请求
最近接触Laravel框架ajax跨域请求的过程中遇到一些问题,在这里做下总结. 一开始发起ajax请求一直报500错误,搜索相关资料后发现Laravel要允许跨域请求可以加入Cors中间件,代码如下 ...
- 浅谈linux 下,利用Nginx服务器代理实现ajax跨域请求。
ajax跨域请求对于前端开发者几乎在任何一个项目中都会用到,众所周知,跨域请求有三种方式: jsonp; XHR2 代理: jsonp: 这种应该是开发中是使用的最多的,最常见的跨域请求方法,其实aj ...
- 解决ajax跨域请求 (总结)
ajax跨域请求,目前已用几种方法实现: 1)用原生js的xhr对象实现. var url="http://freegeoip.net/json/" ...
- $.ajax 跨域请求 Web Api
WepApi确实方便好用,没有配置文件,一个apicontroller直接可以干活了.但今天用$.ajax跨域请求的时候总是获取不到数据,用fiddler一看确实抓到了数据,但回到$.ajax函数中, ...
- JQuery的Ajax跨域请求原理概述及实例
今天在项目中需要做远程数据加载并渲染页面,直到开发阶段才意识到ajax跨域请求的问题,隐约记得Jquery有提过一个ajax跨域请求的解决方式,于是即刻翻出Jquery的API出来研究,发 JQuer ...
- Nginx 实现AJAX跨域请求
在工作中遇到跨域请求的问题: AJAX从一个域请求另一个域会有跨域的问题.那么如何在nginx上实现ajax跨域请求呢?要在nginx上启用跨域请求,需要添加add_header Access-Con ...
- jQuery ajax跨域请求的解决方法
在Ajax应用中,jQuery的Ajax请求是非常容易而且方便的,但是初学者经常会犯一个错误,那就是Ajax请求的url不是本地或者同一个服务器下面的URI,最后导致虽然请求200,但是不会返回任何数 ...
- jquery ajax跨域请求详解
本文章来给大家详细jquery中的ajax跨域请求, 在JQuery对于Ajax的跨域请求有两类解决方案,不过都是只支持get方式.分别是JQuery的jquery.ajax jsonp格式和jque ...
随机推荐
- 安装win7或win8系统时UEFI和Legacy模式的设置
很多新型号的笔记本或台式机主板都开始支持UEFI模式,比起原来的Legacy启动减少了BIOS自检,加快平台启动,如下图所示Legacy,UEFI启动过程: 安装系统,建议选择Legacy模式,在UE ...
- tty相关内容
参考文章: http://blog.csdn.net/goodluckwhh/article/details/13368279
- hdu 4576 概率dp **
题意:Michael has a telecontrol robot. One day he put the robot on a loop with n cells. The cells are n ...
- html中rel标签是什么意思
<a> 标签的 rel 属性用于指定当前文档与被链接文档的关系.用于 <a> 标签的可选属性 rel 和 rev 分别表示源文档与目标文档之间正式的关系和方向.rel 属性指定 ...
- Kmp 算法模板 C
/** * name:KMP * time:2012-11-22 * 字符串快速匹配 */ #include<stdio.h> #include<string.h> typed ...
- Buy the Ticket
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission( ...
- 吃豆子(Packman)
ZLYD团队总结--吃豆子(Packman) 一.设计主要内容 玩家可以通过键盘或鼠标控制游戏区.游戏采取分数和血量制,当血量用尽时游戏结束,游戏以最终玩家获得的分数来判断玩家水平的高低.使用IEDA ...
- 贪心 Gym 100502E Opening Ceremony
题目传送门 /* 题意:有一堆砖块,每一次操作可以选择消去任意一行,也可以选择消去任意一列.求要消去所有的砖块需要最小的操作数 贪心:首先清楚的是消去最高列的最佳,消去第一行最佳,行列的顺序只对中间过 ...
- BZOJ1111 : [POI2007]四进制的天平Wag
POI2007完结撒花~ 首先将n转化为四进制,从低位到高位DP f[i]表示这一位不向下一位借位 g[i]表示这一位向下一位借位,但借的那个不算在i f[0]=0,g[0]=inf f[i]=mer ...
- BZOJ4060 : [Cerc2012]Word equations
首先通过hash建树 设f[i][j]表示第i个特殊符号从P的第j位开始匹配能到达哪里 记忆化搜索,对于底层贪心匹配. #include<cstdio> #include<cstri ...