我正在尝试进行简单的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文件和我的代码中进行精确校正。有什么帮助吗?
由于
答案 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"
}
]
}
)