0

リモートサーバーにロードされているjsonファイルを取得するために、単純なJSONP呼び出しを実行しようとしています。

これは、サーバーにロードされた単純な json ファイルです。

{
    "login": [
        {
            "themename": "NO",
            "themeId": "1"
        }
    ],
    "homePage": [
        {
            "themename": "NO",
            "themeId": "1"
        }
    ],
    "transactionDetails": [
        {
            "themename": "NO",
            "themeId": "1"
        }
    ]
}

このファイルを呼び出してデータを取得するコントローラーコード

 Ext.data.JsonP.request(
    {

    url : 'http://xx.xx:8080/ThemeSelector.json',

            callback : 'someCallback' ,

            someCallback: function(success, result) {

            var text = result.responseText;

              var object = Ext.decode(text);
              themeName = object['homePage'][0].themename;

            }
        });

エラーが発生しています"Uncaught SyntaxError: Unexpected token : "

応答をオブジェクトにラップする必要があることはわかっていますが、json ファイルとコードで正確な修正を行うことはできません。何か助けてください。

ありがとう

4

2 に答える 2

1

JSONP では、応答が JavaScript 関数呼び出しの形式である必要があり、実際の JSON オブジェクトをパラメーターとして渡します。プレーンな JSON は機能しません (できません)。

関数呼び出しがどのように表示されるか (特に関数名) の正確な詳細はさまざまですが、通常は HTTP 要求に追加されるパラメーターです。サーバーは、そのパラメーターの値に基づいて応答を構築する必要があります。

于 2013-02-13T22:50:29.953 に答える
1

JsonP を使用するには、json 応答に、callback送信したパラメーターが含まれている必要があります。それがなければ、callback関数は呼び出されず、それを必要とするためエラーが発生します。あなたの場合、サーバー上にプレーンな JSON ファイルを提供するだけです。したがって、このファイルで JsonP を直接使用することはできません。

サーバーをある程度制御できる場合は、好きなようにこれを実行できるスクリプトを作成できます-

<?php
 header('Content-Type: text/javascript');
 $response = file_get_contents('ThemeSelector.json');
 echo $_GET['someCallback'] . '(' . $response .' );';
?>

次に、受信したjson応答は次のようになります-

Ext.data.JsonP.callback2 (
    {
        "login": [
            {
                "themename": "NO",
                "themeId": "1"
            }
        ],
        "homePage": [
            {
                "themename": "NO",
                "themeId": "1"
            }
        ],
        "transactionDetails": [
            {
                "themename": "NO",
                "themeId": "1"
            }
        ]
    }
)
于 2013-02-14T06:01:15.170 に答える