使用Sencha Touch获取JSON数据

时间:2011-06-23 08:18:39

标签: json sencha-touch

如何在Sencha Touch中捕获使用PHP生成的JSON数据?有谁知道这方面的好教程?

我正在尝试使用以下代码获取JSON数据

Ext.util.JSONP.request({
    url: 'proc/getEvents.php',
    callbackKey: 'callback',
    callback: function(data) {
        var lists = data.results;
        timeline.update(lists); // Update events lists
    }
});

我的JSON数据就像(由getEvents.php生成):

{
   "sample":[
      {
         "id":"1",
         "name":"131\/E Address",
         "desc":"This is where I live!!",
         "lat":"0",
         "lon":"0",
         "starttime":"0",
         "endtime":"0",
         "flag":"0"
      },
      {
         "id":"2",
         "name":"INOX",
         "desc":"Central Mall",
         "lat":"0",
         "lon":"0",
         "starttime":"0",
         "endtime":"0",
         "flag":"0"
      }
   ]
}

现在我想在模板中显示它。

tpl: [
        '<tpl for=".">',
            '<div class="details">',
                '<h2>{name}</h2>',
                '<p>{desc}</p>',
            '</div>',
        '</tpl>'
     ]

任何人都可以帮我找出问题所在吗?我的javascript控制台说(使用getEvents.php)

Resource interpreted as Script but transferred with MIME type text/html.
getEvents.php:1Uncaught SyntaxError: Unexpected token :

2 个答案:

答案 0 :(得分:2)

您需要PHP服务器以JSONP响应,而不是普通的JSON。 'P'表示JSON-with-padding。您指定的callbackKey需要由PHP生成,如下所示:

callback({"sample":[
  {
     "id":"1",
     "name":"131\/E Address",
     "desc":"This is where I live!!",
     "lat":"0",
     "lon":"0",
     "starttime":"0",
     "endtime":"0",
     "flag":"0"
  }, { /*---etc---*/ });

另外,为了使MIME类型问题消失,在PHP中,在完成所有回显或打印之前放入此代码:

    header('Cache-Control: no-cache, must-revalidate');
    header('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); // never, ever cache
    header('Content-type: application/json');

答案 1 :(得分:1)

使用json时可以使用

echo utf8_encode(json_encode($json));

当移动到jsonp时我做了

echo $_GET['callback'] . '('.json_encode($results).')';