js 跨域访问

18 篇文章 0 订阅

$.getJSON(url,data,function) 跨域,提示‘拒绝访问’解决方法  

2011-04-12 00:04:38|  分类:默认分类 |  标签: |字号 订阅

本文件url:http://phpshop.com/tt.php

<html>
<head>
<script type="text/javascript" src="jquery-1.4.2.js"></script>
</head>
<body>
<script type="text/javascript">
$(function(){    
     $.getJSON("http://tt.phpshop.com/bb.php?jsoncallback=?",function(d){alert(d.aa);});
     //alert('aa');
     });
</script>

</body>
</html>

文件:http://tt.phpshop.com/bb.php

<?php

/*$json='{"aa":"bb","cc":"dd","tt":"yy"}' ;
$php=json_decode($json);//转为array object
$array=array('aa'=>'bb','cc'=>'dd','tt'=>'yy');
$json_t=json_encode($array);//转为json
//print_r($php);*/

$json_t='{"aa":"bb","cc":"dd","tt":"yy"}';
echo($_GET['jsoncallback'].'('.$json_t.')');//正确
exit();

?>

在json访问的地址 url 加 ?jsoncallback=?

然后在被访问文件中加 $_GET['jsoncallback']('{内容}');

 

 

 

 

遇到jQuery.getJSON跨域名远程访问json数据源的时候,报“拒绝访问”的脚本错误。

修改前:

   javascript 代码
  1. $.getJSON(apiURL+"gethtlist.jsp", 
  2.       {"page":page,"pageSize":pageSize,"pageinfo":pageinfo}, 
  3.       function(json){ 
  4.             alert(json); 
  5.       }); 

修改后:

   javascript 代码
  1. $.getJSON(apiURL+"gethtlist.jsp?jsoncallback=?", 
  2.       {"page":page,"pageSize":pageSize,"pageinfo":pageinfo}, 
  3.       function(json){ 
  4.             alert(json); 
  5.       }); 

URL后面多了:?jsoncallback=?

当然,jsoncallback可以改为其它你想要的名字,然后在服务端(本例指gethtlist.jsp)应该获取这个参数,并且封装一下json数据。

修改前只是一个json数据对象:
{"data":{id:1,title:’javawind’},msg:"ok",ret:0}

那么我们应该修改成:
jsoncallback({"data":{id:1,title:’javawind’},msg:"ok",ret:0})

其中jsoncallback是获取的jsoncallback的参数,这里是jsp,所以应该是:
<%=request.getParameter("jsoncallback")%>({"data":{id:1,title:’javawind’},msg:"ok",ret:0})

jsoncallback=? 表示参数由jQuery自动生成,最终它会生成一个jsonp1294882912998这样格式(jsonp+时间戳)的参数,你也可以指定jsoncallback=xxxyyy参数给他,服务器端就可以不用动态获取了。



我简单做了一个例子,希望对大家有帮助。
html页面:
  <script type=’text/javascript’ src="http://sto.shawei.com/js/jquery-1.3.2.min.js"></script>
<script type="text/javascript">
function check(){
    var url = "http://newhk.api.favspot.net/merchant/ApplyCheckSpotExist.php?jsoncallback=?";
    try{
        $.getJSON(
                url,
                {"spot_id":4401},
                function(json){
                    try{
                        alert(json.status);
                    }
                    catch(e){}
                }
            );
        }
        catch(e){
            alert(e);
        }
}


check();
</script>

PHP ApplyCheckSpotExist.php页面:
$result =  json_encode($data);
if($_REQUEST[’jsoncallback’]){
    echo $_REQUEST[’jsoncallback’]."(".$result.")";
}else{
    echo $result;
}

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值