使用jQuery获取json数据会返回无效的标签错误

时间:2009-08-05 02:30:47

标签: json jquery

我有这个代码,并且还使用$ .getJson函数尝试了类似的东西:

jQuery(document).ready(function(){
    var kiva_url = "http://api.kivaws.org/v1/loans/newest.json";

    jQuery.ajax({
        type: "GET",
        url: kiva_url,
            data:"format=json", 
        success: function(data){
            alert("here");
            jQuery.each(data.loans, function(i, loan){
                jQuery("#inner_div").append(loan.name + "<br />");
            });
        },
        dataType: "jsonp",
        error: function(){
            alert("error");
        }
    });

});

当我查看Firebug时,它返回“无效标签”错误。我搜索了一些人,他们提到使用解析器来解析结果。我可以看到Firebug中的结果。有人可以指出我应该做的一个例子吗?

Firebug错误:

  

标签无效   http://api.kivaws.org/v1/loans/newest.json?callback=jsonp1249440194660&_=1249440194924&format=json&   第1行

可以在此处找到json外观的示例输出: http://build.kiva.org/docs/data/loans

5 个答案:

答案 0 :(得分:5)

嗯,我找到了答案......看起来kiva不支持jsonp这就是jquery在这里做的事情 -

http://groups.google.com/group/build-kiva/browse_thread/thread/9e9f9d5df821ff8c

  

......我们没有计划支持JSONP。   支持这个主张穷人   安全实践和有   已经有一些很好的方式来访问   来自JavaScript的数据保护您的   应用程序和您的用户。这是一个   关于这个主题的精彩文章:

     

http://yuiblog.com/blog/2007/04/10/json-and-browser-security/

     

虽然对Kiva贷方的风险很低   现在因为我们只处理   公共数据,允许私人贷款人   通过脚本标签导入的数据是   未来的风险。我们的   思想是风险(和复杂性   添加以创建安全应用程序)   不值得的好处   开发者。

     

为。编写服务器端代理   你需要的饲料是最常见的   访问数据的解决方案   基于浏览器的应用程序一些   使用iFrames存在其他技巧。该   最好的希望是新一代的客户 -   基于技术/标准的技术/标准   让基于浏览器的JavaScript访问   安全的跨域资源(   http://dev.w3.org/2006/waf/access-control/   http://json.org/JSONRequest.html)。   一些工具,如BrowserPlus和Gears   今天让你玩这些,但是你   将无法依赖这些   野了一会儿。

     

作为最后一点,我会指出这一点   任何使用JSON响应的人   JavaScript应该解析JSON   显式或之前验证JSON   把eval()带到它。见这里:

     

http://www.JSON.org/js.html

     

从页面链接是一个伟大的   参考实现   提出ECMAScript JSON解析器   interface,JSON.parse()。

     

干杯,skylar

答案 1 :(得分:2)

也许这可以帮助jsonp:

http://remysharp.com/2007/10/08/what-is-jsonp/

答案 2 :(得分:2)

当您返回数据时,是否使用正确的内容类型和方法返回它?

您应该按如下方式返回数据(php 5示例):

$return = "my_callback_method(" . json_encode( array('data'=>'your data etc') ). ")";

while (@ob_end_clean());
header('Cache-Control: no-cache');
header('Content-type: application/json');
print_r($return);

在您的调用javascript代码中,您必须有一个方法来匹配您返回的回调方法,在这种情况下:

function my_callback_method( returned_data ){
}

因此,您的完整调用js应该类似于以下内容

jQuery(document).ready(function(){
var kiva_url = "http://api.kivaws.org/v1/loans/newest.json";

jQuery.ajax({
    type: "GET",
    url: kiva_url,
        data:"format=json", 
    dataType: "jsonp",
    error: function(xmlhttp,error_msg){
            alert("error"+error_msg);
    }
});

function my_callback_method( data ){
   alert("here");
   if( data && typeof(data) == 'object') ){
     jQuery.each(data.loans, function(i, loan){
         jQuery("#inner_div").append(loan.name + "<br />");
     });
   }
}

});

答案 3 :(得分:0)

错误发生在哪里?当您尝试循环遍历ajax数据并将其附加到inner_div时是否会发生错误?如果是,请告诉我们data.loans的样子。

此外,您的代码中存在拼写错误:

            jQuery.each(data.loans, function(i, loan){
                    jQuery("#inner_div").append(loan.name + "<br />"); //It should be loan.name and not laon.name
            });
    },

答案 4 :(得分:0)

这就是答案 http://forum.jquery.com/topic/jquery-getjson-invalid-label

只需使用回调请求包装Json响应即可 例如。 jQuery16203473509402899789_1315368234762({"Code":200,"Message":"Place added successfully","Content":""}); 哪里     jQuery16203473509402899789_1315368234762是您的回调请求(您可以通过查询字符串获取)     {"Code":200,"Message":"Place added successfully"}是您的JSON回复