phpjson跨域
‘壹’ thinkphp 跨域获取 xml 转 json
php xml与json间的相互转换
一,参考xml文件如下
查看复制打印?
<?xml version="1.0" encoding="UTF-8"?>
<humans>
<zhangying>
<name>张映</name>
<sex>男</sex>
<old>28</old>
</zhangying>
<tank>
<name>tank</name>
<sex>
<hao>yes</hao>
<aaaa>no</aaaa>
</sex>
<old>28</old>
</tank>
</humans>
二,xml转换成json
利用simplexml
查看复制打印?
public function xml_to_json($source) {
if(is_file($source)){ //传的是文件,还是xml的string的判断
$xml_array=simplexml_load_file($source);
}else{
$xml_array=simplexml_load_string($source);
}
$json = json_encode($xml_array); //php5,以及以上,如果是更早版本,请下载JSON.php
return $json;
}
三,json转换成xml
利用递归函数
查看复制打印?
public function json_to_xml($source,$charset='utf8') {
if(emptyempty($source)){
return false;
}
$array = json_decode($source); //php5,以及以上,如果是更早版本,请下载JSON.php
$xml ='<!--l version="1.0" encoding="'.$charset.'-->';
$xml .= $this->change($array);
return $xml;
}
public function change($source) {
$string="";
foreach($source as $k=>$v){
$string .="<".$k.">";
if(is_array($v) || is_object($v)){ //判断是否是数组,或者,对像
$string .= $this->change($v); //是数组或者对像就的递归调用
}else{
$string .=$v; //取得标签数据
}
$string .="";
}
return $string;
}
上面的方法json_to_xml,可以支持<name>aaaa</name>,不支持<name type='test'>aaaaa</name>看代码就能看明白。
‘贰’ 如何实现跨域POST json数据,同时可以修改/添加header
在你自己服务器上写一个PHP脚本,获取一个json数据,然后让后端POST过去即可。
PHP可以修改header请求头的,而且请求json或者其他数据都可以,并且没有跨域不跨域的问题。
‘叁’ PHP跨域获取json数据的方法,PHP里面有没有类似ajax的函数
php中的文件读写函数基本上都可直接支持url,也就是说你可以像操作本地文件一样直接操作其他网站的文件(当然只是读取,写入是不可能的),而且没有任何跨域限制,比如下面一行代码就可直接读取网络首页的html代码:
$bd=file_get_contents("http://www..com");
如果想获取json数据,只需把网址换一下即可。当然,还需要做一下格式转换,php本身就有专门的json转换函数:
$json=json_decode(file_get_contents("网址"),true);
这样一看,是不是比前端的ajax还要简单百倍?!
‘肆’ php怎么配合$getjson跨域callback=
type : "post",
url : "ajax.php",
dataType : "jsonp",
jsonp: "callback",//传递给请求处理程序或页面的,用以获得jsonp回调函数名的参数名(默认为:callback)
jsonpCallback:"success_jsonpCallback",//自定义的jsonp回调函数名称,默认为jQuery自动生成的随机函数名
success : function(json){
alert('success');
},
error:function(){
alert('fail');
}
‘伍’ jsonp跨域怎么给php页面传个值过去,php怎么接收
jsonp也是通过get传值的, PHP直接$_GET就可以
‘陆’ JSONP怎样实现跨域
用jQuery实现jsonp跨域非常简单,只要设置ajax()的dateType和jsonp两个参数就行了:
$.ajax({
url:'xxxxxxxx.php',
type:'get',
dataType:'jsonp',
jsonp:'jsonCallBack',//这个名称是和后台约定好的
success:function(result){},
error:function(e){});
});
但是要实现jsonp跨域,还要后台配合。如果后台检测到请求是jsonp,就要把本来是json格式的数据包装成一个javaScript脚本,脚本里包含一个函数,函数名就是上面代码传过来的jsonp参数。这样当浏览器接收到这个脚本时,就会执行这个脚本,这一切jQuery都为我们做好了。
‘柒’ jsonp跨域请求范例,求PHP版本的jsonp范例。
jquery代码:
$.getJSON("http://www.app.com/index.php?c=add&callback=?",{id: 10, name: "test"}, function(data){
alert(data.msg);
});
服务端返回:
jsonp1310628945031({"rs":true,"msg":""})
PHP代码:
$result['rs']= false;
$result['msg'] = '您的信息提交成功!';
$json = new Services_JSON();
header('Content-Type: application/json');
echo $_GET['callback'].'('.$json->encode($result).')';
‘捌’ PHP如何实现跨域传递参数
通常是用json,你可以用php的函数json_encode(),转换为json格式,然后输出进行传递
‘玖’ 如何可以跨域访问静态json文件呢
直接访问地址呗,http://host/jsondata/id.json,和请求js,css,图片的道理是一样的,
直接访问出错的话:
对方禁止跨域请求该文件,即禁止下载
url的映射路径方式被重写,比如:地址规格可能为http://host/data/json/id
‘拾’ 跨域是指什么,因为什么引起的有哪些解决方案web前端知识
域(Domain)是Windows网络中独立运行的单位,域之间相互访问则需要建立信任关系(即Trust Relation)。信任关系是连接在域与域之间的桥梁。当一个域与其他域建立了信任关系后,2个域之间不但可以按需要相互进行管理,还可以跨网分配文件和打印机等设备资源,使不同的域之间实现网络资源的共享与管理。 有一种简明的说法来解释广域跨域:跨域访问,简单来说就是 A 网站的 javascript 代码试图访问 B 网站,包括提交内容和获取内容。由于安全原因,跨域访问是被各大浏览器所默认禁止的。
解决方案:
1、js向服务器发送请求,然后让服务器去另一个域上获取数据后返回。(用于你无法控制另一个域)比如php中利用cUrl。
2、放置跨域文件.
3、用JSONP。虽然不能跨域进行通信,但是可以引入跨域的js文件。
先定义一个函数
varreturnData;
functiongetData(obj){
returnData=JSON.parse(obj);
}
当我们要向www..com/s.php请求数据的时候,我们可以引入某个包含返回信息的js文件。
比如:<script type="text/javascript" src="www..com/s.php?id=12321" />
js的内容是getData({json:'格式'});返回时输出 格式是 text/javascript (比如php用header('Content-type:text/javascript');来输出)
那么文件加载好后解析js时就会执行这个函数,返回得到的数据就被赋值给了returnData变量
以这样的方式插入到页面中:
varscript=document.createElement('script');
script.src='www..com/s.php?id=12321';//传入参数id=12321
body.appendChild(script);