ajax 跨域解决 网上资料
$.getJSON("http://123.123.123.123/?callback=?",
{
"m":"data",// 指定php的文件名字
"act":"getdata",// 指定php文件中的方法
"name":"问题儿童"// 传入的参数
},
function(data) {
// 获得返回值
}
});
}
对应链接下(123.123.123.123)的PHP文件,一般默认先调用index.php文件,通过index.php文件内的方法处理后,转到对应的php文件,并且找到对应的方法,执行之。
index.php代码如下:
/**
* 入口文件
*/
$string = $_SERVER["REQUEST_URI"];// 获取访问的url
$m = get_m($string);
$file_path = "app/".$m.".php";
define('IS_INDEX',true);// 阻止直接访问app目录
require ($file_path);
/**
*
* 获取访问php文件
* @param string $url
*/
function get_m($url){
$strings = explode('m=', $url);
$res = explode("&", $strings[1]);
return empty($res[0])?'index':$res[0];
}
?>
data.php代码如下:
/**
* data文件
*/
$act = !empty($_GET['act']) ? $_GET['act'] : '';
if ($act == 'getdata')
{
$name = "我的名字叫:".$_REQUEST['name'];
echo $_REQUEST["callback"]."(".json_encode($name).")";
}
?>
tml 代码清单:
- <script type="text/javascript" src="http://www.youxiaju.com/js/jquery-1.4.2.min.js"></script>
- <script type="text/javascript">
- $(function(){
- $.ajax(
- {
- type:'get',
- url : 'http://www.youxiaju.com/validate.php?loginuser=lee&loginpass=123456',
- dataType : 'jsonp',
- jsonp:"jsoncallback",
- success : function(data) {
- alert("用户名:"+ data.user +" 密码:"+ data.pass);
- },
- error : function() {
- alert('fail');
- }
- }
- );
- })
- </script>
服务端 validate.php 代码清单:
- <?php
- header('Content-Type:text/html;Charset=utf-8');
- $arr = array(
- "user" => $_GET['loginuser'],
- "pass" => $_GET['loginpass'],
- "name" => 'response'
- );
- echo $_GET['jsoncallback'] . "(".json_encode($arr).")";
效果图:
********************************************************
之前一篇博客详细的说明了jsonp协议,jquery ajax封装了jsonp协议,让跨域请求实现如此简单:
- $.ajax({
- type : "post",
- url : "http://www.phpddt.com/ajax/test",
- dataType : "jsonp",
- jsonp: "callback",//传递给请求处理程序或页面的,用以获得jsonp回调函数名的参数名(默认为:callback)
- jsonpCallback:"success_jsonpCallback",//自定义的jsonp回调函数名称,默认为jQuery自动生成的随机函数名
- success : function(json){
- alert('success');
- },
- error:function(){
- alert('fail');
- }
- });
服务器端处理如下:
- $data = .......
- $callback = $_GET['callback'];
- echo $callback.'('.json_encode($data).')';
- exit;
当使用jsonp时,使用 JSONP 形式调用函数时,如 "myurl?callback=?" jQuery 将自动替换 ? 为正确的函数名,以执行回调函数。
******************************************
一个没那么难的历史难题,其实只要在被请求端,加一句:
header('Access-Control-Allow-Origin: *');
然后……然后没有了。
******************************
javascript客户端代码:
$.getJSON("http://www.xxx.com/***.php?callback=?",{
info: info,
format: "json"
},
function(data) {
alert(data);
}
);
-------------------------------------------------------------------------------------------------
$callback = isset($_GET["callback"]) ? $_GET["callback"]:"callback";
$getstr = isset($_GET["ajaxstr1"]) ? $_GET["ajaxstr1"] : "";
$data = array('type'=>1);
echo $_GET['callback'].'('.json_encode($data).')';
exit;
=============================================================================================
javascript客户端:
$.ajax({
type: "Get",
url: "http://www.baidu.com/?UserId=1001",
cache: false,
error: function () { },
jsonp: "callback",
dataType: "jsonp",
success: function (result) {
alert(result.info);
}
});
---------------------------------------------------------------------------------------------
php服务器端:
$classid=$_GET['classid'];
$num=$_GET['num'];
if($classid&&$num){
$results = array("key" => "value");
echo $_GET['callback'] . '(' . json_encode($results) . ')';
}
但是目前鉴于ie浏览前支持P3P协议(W3C标准的安全协议),而firefox和chrome还不支持,所以在本地搭建环境做测试的时候会发现ie下无法实现跨域调用session去验证数据,只要在php文件头部添加下面的代码即可。
header('P3P:CP="IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT"')
ajax 跨域解决 网上资料的更多相关文章
- ajax 跨域解决方法
最近在开发过程中,使用ajax去异步调取图片.在开发中这个功能没什么问题,可以后来提测,重新部署之后就有问题了,这就是ajax的跨域问题. ajax核心对象XMLHttpRequest本身是不支持跨域 ...
- 转载的别人的ajax跨域解决方法
http://dynamic.vip.xxxxxx.com/active/<controllers>/<active>/<id> 放在浏览器地址栏中访问可以得到正确 ...
- PHP Ajax跨域解决
PHP Ajax 跨域问题最佳解决方案 本文通过设置Access-Control-Allow-Origin来实现跨域. 例如:客户端的域名是client.runoob.com,而请求的域名是serve ...
- jquery ajax跨域解决
双十一开发了一个抽奖API,最近上线了,各个事业部的大神们需要前台页面,异步调用我的抽奖API,要我提供js. js 提供之后发现不对,跨域了.之前也碰到过跨域的问题,研究过这个问题,三种方法解决. ...
- ajax跨域解决办法
在使用jquery的ajax作请求时,http://127.0.0.1:8080,类似这样的一个本地请求,会产生跨域问题, 解决办法一: jsonp: var url= "http://12 ...
- Ajax跨域解决实例
HTML 在本例中我们跨域http://www.sucaihuo.com/jquery/demo/43/jsonp.php?callback=.你也可以试试其他域名.下面表单中,我们提交后的结果反馈到 ...
- ajax跨域解决
https://blog.csdn.net/csdn_ds/article/details/73691134 Access-Control-Allow-Origin 跨域设置多域名:http://ww ...
- HBuilder开发app ajax跨域 解决XMLHttpRequest
<div id="a1" onclick="testXHR()" style="font-size: 5em;">sss1< ...
- Ajax 跨域,这应该是最全的解决方案了
https://segmentfault.com/a/1190000012469713 前言 从刚接触前端开发起,跨域这个词就一直以很高的频率在身边重复出现,一直到现在,已经调试过N个跨域相关的问题了 ...
随机推荐
- 【转】Linus:利用二级指针删除单向链表
原文作者:陈皓 原文链接:http://coolshell.cn/articles/8990.html 感谢网友full_of_bull投递此文(注:此文最初发表在这个这里,我对原文后半段修改了许多, ...
- HashMap, HashTable, CurrentHashMap的区别
转载:http://www.jianshu.com/p/c00308c32de4 HashMap vs ConcurrentHashMap 引入ConcurrentHashMap是为了在同步集合Has ...
- springmvc配置文件-1
项目1: web.xml <?xml version="1.0" encoding="UTF-8" standalone="no"?& ...
- linux 文件操作命令
目录操作命令 命令格式 命令 [-选项] [-参数] ls -la /etc 有多个选项时可以合并 ls命令: -a (all) 显示所有文件,包括隐藏文件,那是用.开头的文件 为什么要隐藏(这是个系 ...
- ACM-ICPC国际大学生程序设计竞赛北京赛区(2016)网络赛 The Book List
描述 The history of Peking University Library is as long as the history of Peking University. It was b ...
- NET MVC1项目升级到MVC2最简单的方法
NET MVC1项目升级到MVC2最简单的方法 把MVC1项目升级到MVC2,最简单的做法如下: 新建MVC2项目 新建一个MVC2项目,把原来MVC1的项目文件全部拷贝到新建MVC2项目目录里,依照 ...
- Android编译选项eng、user、userdebug的区别
eng:debug 版本 user: release 版本 userDebug版本:部分debug版本 LOCAL_MODULE_TAGS := user eng optional test这个样子. ...
- Linux各发行版本简介
简介 Linux 主要作为Linux发行版(通常被称为"distro")的一部分而使用.这些发行版由个人,松散组织的团队,以及商业机构和志愿者组织编写.它们通常包括了其他的系统软件 ...
- Centos下防火墙的设置
service iptables status可以查看到iptables服务的当前状态.但是即使服务运行了,防火墙也不一定起作用,你还得看防火墙规则的设置 iptables -L在此说一下关于启动和关 ...
- 定时自动启动任务crontab命令用法
crontab简介 crontab命令常见于Unix和类Unix的操作系统之中,用于设置周期性被执行的指令.该命令从标准输入设备读取指令,并将其存放于“crontab”文件中,以供之后读取和执行.该词 ...