2011-08-05 19 views
3

私は別のページからいくつかのHTMLコードを取得し、別のWebサイトにあるページに挿入しようとしています。 問題は、クロスドメイン$ .get()呼び出しが機能していることです。 しかし、ほとんどの人は、問題を解決するためにjsonを使用することをお勧めします。jquery getjsonクロスドメインの問題

これは、私はこれは私が使う機能です

<?php 
$arr = array(array("test","this is a string")); 
$arr['name'] = "response"; 
echo $_GET['callback'] . "('" . json_encode($arr) . "')"; 
?> 

を使用するPHPファイルで、それはjqueryの

function getJson(site, callback){ 
    $.ajax({ 
     url:site, 
     dataType: 'JSONP', 
     success:function(json){ 
      callback(json); 
     }, 
     error:function(){ 
      //handle error 
     }, 
    }); 
} 

を使用していますこれは私が

getJson("http://websitename.com/page.php?callback=?", function(data){ 
    alert(data); 
}); 

の警告が表示さ、それをアクセスする方法でありますこの文字列

それはJSON

data.test; 
data["test"]; 

編集であるかのように

私の質問はどのように私は、データ変数にアクセスすることができ、次のとおりです。私はあなたがすることはできません

$.parseJSON(data) 

答えて

0

あなたがすることはできません。

誰があなたにjsonを使用するように言ったのか分かりませんが、間違っていました。 Ajax(jsonではない、jsonは何か他のもの)はドメインを越えることはできません。ドメインが異なる場合は、iFrameからHTMLを読み取ることはできません。

サーバーサイドプロキシを使用すると、必要な場合にこれを行うことができますが、要求はクライアントではなくサーバーのコンテキスト内にあることに注意してください。

編集:

私はちょうどあなたがJSONPをやっている実現しました! (私はあなたがHTMLを取得しようと思っていた。)

すべてを行う必要がある追加です:リクエストに

dataType: 'jsonp' 

をし、それが動作するはずです。

+0

実際、Ajaxは[クロスドメイン](http://en.wikipedia.org/wiki/Cross-Origin_Resource_Sharing)を行うことができます。 – Malvolio

+0

@malvolioすべてのブラウザでサポートされているわけではないので、私にはそれはカウントされません。 – Ariel

+0

* Javascript *は、すべてのブラウザでサポートされているわけではありません。ある時点で、悪いブラウザの古いバージョンを手放す必要があります。 – Malvolio

0

JSONPを使用しようとしています。は動作しません。 JSONPは、特別にフォーマットされたJSONデータを取得しているときに機能します。あなたが得ようとしているデータは、Arielが指摘しているように、JSONではなく、HTMLであり、適切にフォーマットされていません。 Jacekの提案は、リモートサーバーを制御できる場合には正しいものです。それ以外の場合は、Ariel氏のように(ローカルサーバー上の)サーバー側のプロキシが必要です。

EDIT:質問を変更すると、回答が変わります。私はあなたが間違ってやっている見ることができます

唯一の事はあるあなたがURLにcallbackを指定している - jQueryのは、あなたのためにこれの世話をします - あなたは大文字でJSONPを書いていること。私はこれらのいずれかが実際に問題であるとは信じられません。 Firebugのネットタブに要求が表示されていない場合は、jQueryコードをステップ実行してください(それほど複雑ではありません)。

+0

私は彼がHTMLを手に入れようとしているのかどうか確信できません。私は彼がjsonpを働かせようとしているかもしれないと思う。 – Ariel

+0

私は変数の1つにhtmlのjsonデータを取得しています。それでも動作し、プレーンテキストとして返す必要があります。 – Drake

+0

私は、私の質問で指定されているように、ドメイン全体でjsonデータを取得するという元の問題を解決しました。残っている問題は、プレーンテキスト文字列から、大括弧または名前でアクセスするjson形式にフォーマットすることです。 – Drake

関連する問題