json真难搞,经常这里错哪里错,还找不到原因。今天调试下面的代码,通过jsonp获取其它服务器中的数据,谷歌总是提示下面的错误:
Resource interpreted as Script but transferred with MIME type text/json: "http://127.0.0.1:81/jsonp.php?callback=jQuery16206906629570294172_1365317138501&_=1365317138505". jquery-1.6.2.js:7752
Uncaught SyntaxError: Unexpected token : jsonp.php:1IE浏览器提示:
行:2
Char:8
错误:缺少';'
代码:0
URL:http://localhost/ajax/jqueryajax.html代码如下:
http://localhost/ajax/jqueryajax.html文件源码:
<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8">
</head>
</body>
<script type="text/javascript" src="js/jquery-1.6.2.js"></script>
<script type="text/javascript">
$(function(){
$.getJSON("http://127.0.0.1:81/jsonp.php?callback=?",function(data){ 
alert(data.name + data.age);
});
});
</script>
</body>
</html>http://127.0.0.1:81/jsonp.php文件源码:
<?php
header("content-type:text/json;charset=utf-8");
header("Cache-Control: no-cache, must-revalidate");
$username='{"name":"老邹","age":1984}'; 
echo $username;
?>我在我电脑里运行了两个php环境,两个程序分别放在不同的环境中,他们的端口号不一样。
请大家帮看看哪里错了,我就是找不到哪里错了。

解决方案 »

  1.   

    jsonp需要一个调用来触发你传入getjson的那个函数,而触发就靠你传入的一个callback参数,这个参数值实际上就是一个特殊函数名,你返回的必须是一段JS代码,才能够触发它,也就是类似
    callack_12324343({'hello':'world'});
    因此你上面的echo $username;改成echo "{$_GET['callback']}({$username});";才算符合JSONP的要求
      

  2.   

    简单点说 jsonp跨域的时候要传入一个指定的jsonp编号过去,就是你的连接 比如
    http://xxxxxx.com?jsonp=?&id=1&password=1
    jsonp=?就是传递过去的编号,
    在服务器用GET接受jsonp
    比如  $json = $_GET('jsonp');
    你打印内容返回给前台的时候要注意格式
    jsonp的编号打头
    echo "$json($b)";
    $b是你的json格式内容
    这样就能接受到了!