0

このphpファイル(courses.php)は別のドメインにあります。

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

 $array = array();
 $array[0]["id"] = "1";
 $array[1]["id"] = "2";
 $array[2]["id"] = "3";

 $array[0]["coursename"] = "Course Name 1";
 $array[1]["coursename"] = "Course Name 2";
 $array[2]["coursename"] = "Course Name 3";


echo json_encode($array);

?>

私はJSONPを使用して、ローカルホストで以下のようなデータにアクセスします。

$.getJSON( 'http://example.info/mobile/courses.php?callback=?', function( result ) {
       console.log(result);
});

それは動作しません。しかし、以下のようにURLをTwitterに変更すると、機能します

$.getJSON( 'http://search.twitter.com/search.json?q=dogs&callback=?', function( result ) {
       console.log(result);
});

私の知識によれば、それはcourses.phpファイルでなければなりません。しかし、これを修正する方法がわかりません。

何が問題になる可能性がありますか?どうすればこれを修正できますか?

4

1 に答える 1

1

スクリプトはJSONPを返しませんが、JSONを返します。JSONPの応答は、1つの関数呼び出しを含むJavaScript「ファイル」であり、関数名はcallbackパラメーターから取得されます。

だからただ戻る代わりに

{"bar": 42}

あなたは戻らなければなりません

foo({"bar": 42});

出力に関数名を含めます。

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

存在しない場合は、適切なデフォルトを使用するか$_GET['callback']、JSONを返すこともできます。これは、JSONPを必要としない、または使用できない場合に役立ちます(たとえば、別のサーバー側スクリプトからURLを呼び出す)。


注:「JSONP」という名前は少し誤解を招く可能性があります。これは、この手法が実際にはJSONとは何の関係もないためです。生成する応答は純粋なJavaScriptコードであり、関数呼び出しに何でも渡すことができます。JSONでエンコードされ、オブジェクトとして解釈されるデータ構造である必要はありません(任意の有効なJavaScriptデータ型にすることができます)。

于 2013-03-21T09:04:29.550 に答える