繁体   English   中英

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

[英]Sencha Touch : How to get the simple json file as response using 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文件和我的代码中进行精确校正。 有什么帮助吗?

谢谢

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

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

要使用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"
            }
        ]
    }
)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM