1

このページの json コンテンツを読みたい : http://89.92.40.250:8010/dreamteam/interface/get_event_detail.php?id=397javascript で。

だから私はこのスクリプトを始めました:

var req = new XMLHttpRequest();
    req.open("GET", "http://89.92.40.250:8010/dreamteam/interface/get_event_detail.php?id=397", true); 
    req.onreadystatechange = monCode;   
    req.send(null);      

    function monCode() { 
        if (req.readyState == 4) { 
            var doc = eval('(' + req.responseText + ')');
            alert(req.responseText);
        }
    } 

コンテンツを表示したいときは、alert(req.responseText); を使用します。そして中身が見えません。さらに、Firebug に構文エラーがあります: syntax error : var doc = eval('(' + req.responseText + ')');

JSONP では不可能です。

ページのコンテンツを抽出し、それを JSON 形式に変換して解析できますか??

4

4 に答える 4

1

独自のプロキシを作成できない場合は、YQL を使用してクロス ドメインの問題を回避する必要があります。

の URL の例を次に示しますid=397

http://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20json%20where%20url%3D'http%3A%2F%2F89.92.40.250%3A8010%2Fdreamteam%2Finterface%2Fget_event_detail.php%3Fid%3D397'&format=json&diagnostics=true

このようにidを動的に設定できます。

var id = 397;
var baseurl = "http://query.yahooapis.com/v1/public/yql?q=";
var q = "select * from json where url = 'http://89.92.40.250:8010/dreamteam/interface/get_event_detail.php?id="+id+"'";  
var url = baseurl + encodeURI(q) + "&format=json&diagnostics=true";
var req = new XMLHttpRequest();
req.open("GET", url, true);
req.onreadystatechange = monCode;
req.send(null);

function monCode() {
    if (req.readyState == 4) {
        var data = JSON.parse(req.responseText).query.results;
        console.log(data);
        //console.log(data.event);
        alert(data.event.title);
    }
}​

そして、ここにjsFiddle DEMOがあります

YQL の使用制限

  • アプリケーションごとの制限 (アクセス キーで識別): 1 日あたり 100,000 コール
  • IP ごとの制限: /v1/public/ : 1 時間あたり 2,000 コール。/v1/yql/ : 1 時間あたり 20,000 回の呼び出し
于 2012-05-13T13:06:07.350 に答える
1

クロスドメインの制限により、これは不可能です。ページは同じホストでホストする必要があります。

次の代替手段に投資できます。

  • JSONPを使用します(おそらくあなたのケースでは機能しません)
  • ファイルの内容をプルする同じホストでサーバー側スクリプトを使用します (プロキシなど)。
  • クロスドメインアクセス制御を設定する方法を見てください: https://developer.mozilla.org/En/HTTP_access_control (おそらくあなたにとってもオプションではありません)
于 2012-05-13T11:58:31.920 に答える
0

上記のコメントで述べたように、クロスドメイン AJAX リクエストを行うことはできません。通常、ブラウザはこれを禁止しています。

本当にクロスドメイン リクエストを実行したい場合は、いくつかのオプションがあります。1 つはプロキシ (リクエストをリモート サーバーに送信するようにローカル Web サーバーを構成する) で、もう 1 つはJSONPです)。

scriptJSONP は基本的に、リクエスト URL を として使用しながら、HTML ドキュメントに追加のタグを追加することで構成されますsrc。これにより、他のサイトの JS リソースをいつでも含めることができるため、クロスドメイン セキュリティ制御をバイパスできます。ただし、リモート サーバーは、要求にプレフィックスを適用する必要があることを認識している必要があります (つまりread_data({ /* JSON response */});、そうしないと、返された情報が処理されません。

アップデート

たとえば、jQuery は、通常の AJAX リクエストであるかのように、JSONP を透過的に処理できます。

http://api.jquery.com/jQuery.ajax/

すなわち:

$.ajax({url:'http://your/request/url/',
        jsonp: 'your_desired_prefix',
        success: function(result) {
          /* result should hold you JSON data */
        });
于 2012-05-13T12:35:56.770 に答える
0

127.0.0.1 から 89.92.40.250:8010 へのリクエストなので、クロスドメイン リクエストになります。127.0.0.1:8080 のように、同じマシンの別のポートにアクセスしてもクロス ドメイン リクエストです。

89.92.40.250:8010 によってレンダリングされるコンテンツを制御できる場合はjsonp、クロス ドメイン制限を回避するために使用できますが、バックエンドでいくつかの変更が必要になるか、http://jsonp.jit.su/ で提供される機能を使用できますこれは基本的にあなたに代わってサーバーに連絡し、jsonpあなたが処理できる応答を作成します。

于 2012-05-13T12:15:11.173 に答える