0

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

这是我在服务器上加载的简单 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 回答