2

タイトルにあるように、サイトから提供されたAPIからjsonを取得しようとしています。私は今、さまざまなことを試し、さまざまな結果を得ています。jsonを取得して解析し、必要な情報を取得できるようにしたいと考えています。これが私が試したことです:

1)$ .ajax()コードチャンク(ボタンがクリックされたときに実行されます):

  $.ajax({
            type: 'GET',
            url: url,
            dataType: 'json',
            success: function(data) {
                alert('Success!');
            }
        });

これにより、「OriginnullはAccess-Control-Allow-Originで許可されていません」が生成されます。エラーが発生し、サーバーからの応答がありません(ChromeまたはFFの場合、これは私の使用する小さなプロジェクトであるため、IEについては気にしません)。周りを見回すと、外部のWebサイトに接続しようとしているので、jsonpdataTypeである必要があるのではないかと思いました。これで私は#2を試してみました

2)jsonpdataTypeを使用した$.ajax

$.ajax({
        type: 'GET',
        url: url,
        dataType: 'jsonp',
        success: function(data) {
            alert('Success!');
        }
    });

「&callback =?」も追加しました 関数に与える「url」の最後まで。Chromの開発ツールを使用すると、今回はサーバーからの応答を確認できますが、アラートは表示されません。JSONLINTを使用して、応答が適切なjson(つまり)であることを確認し、jsonを変数に設定して、それを試してみました(スクリプトタグの前半で変数を初期化する行に沿って[var response; ]そしてjsonをそれに割り当てようとしています[response=data;])。これは、alert(response)を試みたときに未定義を生成しました。後で(response = jsonとは思わない;何らかの理由でビットが呼び出されたことはありません)。

私も$.getJSONを使用してみましたが、そのAPIを見ると、とにかく$ .ajaxを実行しているようです($。 )。jsonp Chromeとして試してみると(FFはこのエラーを生成しません)、「予期しない構文エラー:予期しないトークン:」が表示されます。これにより、私が話そうとしているサイトでjsonpが機能しておらず、jsonリクエストとしてサードパーティのサイトにアクセスできないと思います。このリンクでは、応答から得られるように、サーバーをtext/htmlではなくapplication/jsonとして返すように設定することで、問題を修正する方法について説明しています(ただし、サードパーティのサイトにアクセスしようとしているため、サーバーにアクセスしないでください)。

私はこれをChromeとFFで試し、それぞれのDev Tools / Firebugを調べて、同じことを確認しました(FFは元のエラーを生成しませんが、それは明らかにChromeのバグです)。

また、返されたjson応答を取得し、その上で$ .parseJSONを実行して、さまざまな部分を取得できましたが、$。ajax / $。getJSONが機能するようになったら、どうすればjsonにアクセスできますか?

任意の考え/解決策をいただければ幸いです。

4

5 に答える 5

0

私もかつてUnexpected Syntax Error: Unexpected token :エラーになりました。

このサイトは Cross-Domain-Loading をサポートしていないようです。どの API を使用しようとしていますか?

于 2012-04-20T20:01:56.157 に答える
0

多くの場合、応答は有効な JSON ですが、有効な JSONP ではありません。JSONP 応答を取得するには、サードパーティ サーバーが JSONP をサポートしている必要があります。サードパーティのサーバーを制御できない場合、唯一の現実的なオプションは、サーバー側のプロキシまたは YQL を使用することです。

于 2012-04-20T20:02:09.147 に答える
0

JSONP に JQuery AJAX を使用しないでください。

which を使用<script type='text/javascript' src=' URL_GOES_HERE&callback=BLAH '></script>して json オブジェクトを javascript メソッド呼び出しで囲むと、サードパーティ ソースからのデータを使用できます。

http://en.wikipedia.org/wiki/JSONP

于 2012-04-20T20:02:37.493 に答える
0

JSONP プラグインを試してください。軽量で、本来の機能を備えているという理由だけで、私が推奨する数少ないプラグインの 1 つです。また、成功以外の応答を確認することもできます。JSONP でうまく機能し、サブドメインを使用して適切なエラー応答を取得できないという問題を解決しました (その後、コードが停止しました)。

ここで入手してください

于 2012-04-20T20:07:34.673 に答える
0

この方法を試しましたか?

$.getJSON( url + "?callback=?", function(data) {
    console.info(JSON.stringify(data, null, 2));
});

これは基本的に、 http: //freegeoip.net/json/ への JSONP コールバックを管理する方法です

于 2016-12-30T04:02:45.400 に答える