2012-03-20 20 views
2

json結果を返す1つのサーバー上にphpコードページがあります。 という名前のPHPファイル:getInfoData.phpが返されます。PHP、jQuery Ajaxとjsonがクロスドメインを経由して返す

echo json_encode($v); 

私は(??)のJSONを読み、同じサーバの罰金にそれをすべて実行するために$ .getJSONを使用することができますが、私はそれを呼び出すjsのページとは異なるサーバ上にあるようにPHPのページを必要としません。

しかし、それから、私はいつ私がクロスドメインの問題を取得します。

$.ajax({ 
    url: 'FILE_LOCATION_ON_ANOTHER_SERVER', 
    type: 'GET', 
    crossDomain: true, 
    dataType: 'jsonp', 
    success: function() { console.log("Success"); }, 
    error: function() {console.log('Failed!'); } 
}); 

が、私はちょうど私のコンソールで、次を得る何も表示されません:

は、だから私は、次の(JSONP)を使用するようにコードを変更し

http://www.THEURL.com/FOLDER/FILENAME.php?callback=jQuery171013088115444406867_1332256223342&_=1332256223343 

とメッセージを言っ失敗!

私は間違って何をしていますか、どうすればこの問題を解決できますか?

おかげ

答えて

3

JSONPは実際にはJSONではありません。これはちょっとした "ハック"です。 JSONPは実際にはJavaScriptファイルで、ダウンロードされて実行されます。

PHPページでは、callbackパラメータを渡す必要があります。 JSONをその中に「ラップする」必要があります。それは次のようになります。

func({json: data}) 

だから、あなたのPHPは次のよ​​うになります。私はこれを使用

echo $_GET['callback'] . '(' . json_encode($v) . ')'; 
2

通常、多分、私が見たので、より良い方法

<?php header('content-type: application/javascript; charset=utf-8'); 

$data = array(1, 2, 3, 4, 5, 6, 7, 8, 9); 

echo htmlspecialchars($_GET['callback']) . '('.json_encode($data).')'; 

がありますあなたはコールバックパラメータを用意しました。すべてはOKです

+0

JSONPは実際にはJSONではなく、スクリプトタグに追加されるJavaScriptファイルです。代わりに 'application/javascript' MIMEを使うべきです。 –

+0

@Rock thaksの提案: –

+0

あなたの返信に感謝します。 –

関連する問題