Sencha Touch:如何使用JSONP将简单的json文件作为响应?

时间:2013-02-13 22:49:40

标签: javascript sencha-touch sencha-touch-2 jsonp

我正在尝试进行简单的JSONP调用以获取在远程服务器上加载的json文件。

这是我在服务器上加载的简单json文件。

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

我的Controller代码调用此文件来获取数据

 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文件和我的代码中进行精确校正。有什么帮助吗?

由于

2 个答案:

答案 0 :(得分:1)

JSONP要求响应采用JavaScript函数调用的形式,将实际的JSON对象作为参数传递。普通的JSON不会(不能)工作。

函数调用的外观(特别是函数名称)的确切细节可能会有所不同,但通常它是添加到HTTP请求的参数。服务器应根据该参数的值构建响应。

答案 1 :(得分: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"
            }
        ]
    }
)