Мобильное приложение с использованием Sencha Touch - запрос JSON генерирует синтаксическую ошибку

Я начал немного играть с Sencha Touch.

Поэтому я создал очень простое приложение на основе одного из примеров, чтобы посмотреть, как оно работает.

По сути, он создает запрос JSON, который выполняет веб-сервис Last.FM для получения музыкальных событий рядом с местоположением пользователя.

Вот код JSON:

var makeJSONPRequest = function() {
        Ext.util.JSONP.request({
        url: 'http://ws.audioscrobbler.com/2.0/',
            params: {
                method: 'geo.getEvents',
                location: 'São+Paulo+-+SP',
                format: 'json',
                callback: 'callback',
                api_key: 'b25b959554ed76058ac220b7b2e0a026'
            },
            callback: function(result) {
                var events = result.data.events;
                if (events) {
                    var html = tpl.applyTemplate(events);
                    Ext.getCmp('content').update(html);                        
                }
                else {
                    alert('There was an error retrieving the events.');
                }
                Ext.getCmp('status').setTitle('Events in Sao Paulo, SP');
            }
        })
    };

Но каждый раз, когда я пытаюсь запустить его, я получаю следующее исключение:

Uncaught SyntaxError: Неожиданный токен:

У кого-нибудь есть подсказка?

Ответы на вопрос(1)

Решение Вопроса

"Uncaught SyntaxError: Unexpected token :" означает, что браузер движок JavaScript жалуется на двоеточие":" это было помещено в неправильном месте.

Проблема, скорее всего, будет в возвращенном JSON. Поскольку все, что возвращает сервер, будет запущено черезeval("{JSON HTTP RESULT}") Функция в JavaScript, наиболее вероятно, что ваша проблема где-то там.

Я поместил ваш код в маленький тестовый комплект Sencha и обнаружил пару проблем с ним.

Первый: Мой браузер был не слишком доволен "волнистой линией" вlocation: 'São+Paulo+-+SP', поэтому я должен был изменить это наlocation: 'Sao+Paulo,+Brazil', которая работала и возвращала правильные результаты из API аудиосписчика.

Во-вторых: Я заметил, что вы добавилиcallback: 'callback', строка параметров вашего запроса, которая меняет природу HTTP-результата и возвращает JSON следующим образом:

callback({ // a function call "callback(" gets added here
   "events":{
      "event":[
         {
            "id":"1713341",
            "title":"Skank",
            "artists":{
               "artist":"Skank",
               "headliner":"Skank"
            },
         // blah blah more stuff
      "@attr":{
         "location":"Sao Paulo, Brazil",
         "page":"1",
         "totalpages":"1",
         "total":"2"
      }
   }
}) // the object gets wrapped with extra parenthesis here

Вместо этого я думаю, что вы должны использоватьcallbackKey: 'callback' это идет с примером вhttp://dev.sencha.com/deploy/touch/examples/ajax/index.js.

Примерно так, например:

   Ext.util.JSONP.request({
        url: 'http://ws.audioscrobbler.com/2.0/',
            params: {
                method: 'geo.getEvents',
                location: 'Sao+Paulo,+Brazil',
                format: 'json',
                api_key: 'b25b959554ed76058ac220b7b2e0a026'
            },
            callbackKey: 'callback',
            callback: function(result) {
                 // Output result to console (Firebug/Chrome/Safari)
                 console.log(result);
                 // Handle error logic
                 if (result.error) {
                    alert(result.error)
                    return;
                 }
                 // Continue your code
                var events = result.data.events;
                // ...
            }
        });

Это сработало для меня, надеюсь, это сработает и для вас. Cherio.

 born to hula11 нояб. 2010 г., 16:57
Спасибо человек, который действительно помог мне, ура
 Steven de Salas12 нояб. 2010 г., 10:53
Не беспокойтесь, рад помочь.

Ваш ответ на вопрос