Пара вещей. Прежде всего, "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.