+ -
当前位置:首页 → 问答吧 → getjson产生错误,请高手看看

getjson产生错误,请高手看看

时间:2009-07-09

来源:互联网

<script>
    $.getJSON("http://bbs.babydao.com/formhash.php?jsoncallback=?",function(data){
        eval('var jsondata='+ data);
        alert(jsondata.formhash);
    });
</script>

这段代码哪里出错了呢

ie6提示
Error:缺少 ';'

火狐提示
invalid label
http://bbs.babydao.com/formhash.php?jsoncallback=jsonp1247113211146&_=1247113211157
Line 1

http://bbs.babydao.com/formhash.php是输出json的地址
出错文件在这里http://www.babydao.com/2.html
希望高手帮帮忙

作者: loyos   发布时间: 2009-07-09

如果是你自己的网站,把返回头的Content-Type设为application/json

返回的就是json对象,不要eval,甚至连jsoncallback也不用:

$.getJSON("http://bbs.babydao.com/formhash.php?jsoncallback=?",function(data){
        alert(data.formhash);
    });

如果不是你自己的网站,不能用用getJSON,因为格式不是JSONP,缺了括号,要用ajax函数自己eval,并在最后加上分号

作者: keakon   发布时间: 2009-07-09

原来getjson接受的是jsonp啊,这个问题已经解决了。
但是如果输出的是json,可以用getjson吗
我之前用的就是json,但是好像有问题。写法如下
<script>
    $.getJSON("http://bbs.babydao.com/formhash.php",function(data){
。。。。。。
    });
</script>

<?php
header('Content-Type: application/json');
include('include/common.inc.php');
$jsonarr=array('formhash'=>FORMHASH);
$putjson=json_encode($jsonarr);
//echo $_REQUEST['jsoncallback'].'('.$putjson.')';
echo $putjson;
?>

作者: loyos   发布时间: 2009-07-09

当然支持JSON,但必须是相同域名

JSONP要求callback参数,输出要带括号

这些都要Content-Type: application/json

作者: keakon   发布时间: 2009-07-09

json只能在同域名下面调用啊?
怎么网上的都说可以跨域

作者: loyos   发布时间: 2009-07-10

JSON必须是同域

JSONP可以跨域

原理可以看这里:使用JSONP来取代AJAX进行跨域

作者: keakon   发布时间: 2009-07-10

getJSON可以跨域,使用的是JSONP的方式 不需要用eval

作者: kjah   发布时间: 2009-07-10

$.getJSON("http://api.flickr.com/services/feeds/photos_public.gne?tags=cat&tagmode=any&format=json&jsoncallback=?",
function(data){
  $.each(data.items, function(i,item){
    $("<img/>").attr("src",
item.media.m).appendTo("#images");
    if ( i == 3 ) return false;
  });
});
-------------
上面是API的EXAMPLE

作者: shgen   发布时间: 2009-07-14

相关阅读 更多