Извлечение данных JSON с помощью Sencha Touch - PullRequest
0 голосов
/ 23 июня 2011

Как мне получить данные JSON, сгенерированные с помощью PHP в Sencha Touch?Кто-нибудь знает хороший учебник по этому вопросу?

Я пытаюсь получить данные 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 ]

2 голосов
/ 28 июня 2011

Вам понадобится ваш PHP-сервер для ответа в формате JSONP, а не в виде обычного JSON.'P' означает JSON-с отступом.Указанный вами 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 голос
/ 20 марта 2013

При использовании json это работает

echo utf8_encode(json_encode($json));

Когда переехал в jsonp, я сделал

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