无法在jquery中加载json数据

时间:2012-11-29 12:23:49

标签: javascript ajax json jquery

我想从twitter获取json数据。 http://api.twitter.com/1/statuses/public_timeline.json 这是我的代码

<html>
<head>
    <script src="http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.8.3.min.js"></script>
    <script>
        $(document).ready(function(){

            $("button").click(function(){
                $.getJSON("http://api.twitter.com/1/statuses/public_timeline.json",function(result){
                    $.each(result, function(i, field){
                        $("div").append(field + " ");
                    });
                });
            });
        });
    </script>
</head>
<body>

<button>Get JSON data</button>
<div></div>

</body>
</html> 

来自http://www.w3schools.com/jquery/tryit.asp?filename=tryjquery_ajax_getjson 但它不起作用!

4 个答案:

答案 0 :(得分:1)

您正在使用JavaScript中的same origin policy。这基本上说,你不能从不同的域访问资源(在你的情况下,其他域将是twitter.com)。

一种解决方案是使用JSONP。推特API supports this。您可以在这种情况下使用jQuery运行JSONP请求:

$.ajax({
  url: "http://api.twitter.com/1/statuses/public_timeline.json",
  cache: false,
  dataType: 'jsonp',
  success: function( result ){
    $.each(result, function(i, field){
                        $("div").append(field + " ");
                    });
  }
});

此外,w3schools不是可靠的信息来源。更好地使用像Mozilla Developer Network

这样的东西

答案 1 :(得分:0)

查看您要加载的json文档。当我尝试访问它时,它返回以下错误:

{"errors":[{"message":"Sorry, that page does not exist","code":34}]}

在您担心代码段是否正常工作之前,我会尝试使用对twitter的工作api调用替换url。 :)

答案 2 :(得分:0)

您尝试从其他域获取文档,并且由于Cross-Origin资源共享,请求的网址阻止了您的请求。你可以在这里阅读:http://en.wikipedia.org/wiki/Cross-Origin_Resource_Sharing

您可以将jSONP与jQuery一起使用,这可以让您完成请求,但您请求的页面会出现404错误,因此您可能无法对结果做多少。

答案 3 :(得分:0)

您可以使用$ .ajax()jquery方法从其他域访问json数据。请参阅下面的代码示例

   $.ajax({

   url : " // twitter api url",
   dataType : "JSON",
   cache : false,
   success : function(success)
    {
     $.each(success, function(index,value) {$("div").append(value + ""); })
    }

   error : function() { //Statements for handling ajax errors }

   });

您在该ajax请求中使用的url正在返回包含错误的json数组

{"errors": [{"message": "The Twitter REST API v1 is no longer active. Please       
migrate to API v1.1. https://dev.twitter.com/docs/api/1.1/overview.", "code": 68}]}

您需要在处理请求之前迁移到API v1.1,将twitter api url替换为API v1.1中提供的新json url