3

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

4 に答える 4

1

JavaScriptの同じオリジン ポリシーで実行しています。これは基本的に、異なるドメインからリソースにアクセスできないことを示しています (この場合、他のドメインは twitter.com になります)。

1 つの解決策は、JSONP を使用することです。Twitter API はこれをサポートしています。次のように、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のようなものを使用することをお勧めします。

于 2012-11-29T12:29:52.357 に答える
0

読み込もうとしている json ドキュメントを確認してください。アクセスしようとすると、次のエラーが返されます。

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

コード スニペットが機能しているかどうかを心配する前に、URL を twitter への機能する API 呼び出しに置き換えてみてください。:)

于 2012-11-29T12:29:43.740 に答える
0

別のドメインからドキュメントを取得しようとしていて、要求された URL がCross-Originリソース共有のために要求をブロックしています。ここでそれを読むことができます: http://en.wikipedia.org/wiki/Cross-Origin_Resource_Sharing

JSONP を jQuery で使用すると、リクエストを完了することができますが、リクエストしているページで 404 エラーが発生するため、おそらく結果に対してできることはあまりありません。

于 2012-11-29T12:29:55.973 に答える
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 に置き換えます。

于 2013-07-04T06:33:57.037 に答える