Mobile Application Using Sencha Touch - JSON Request Generates Syntax Error

前端 未结 1 659
深忆病人
深忆病人 2021-01-06 23:56

I started playing a bit with Sencha Touch.

So I\'ve built a really simple application based on one of the examples just to see how it goes.

Basically it crea

1条回答
  •  小鲜肉
    小鲜肉 (楼主)
    2021-01-07 00:26

    A couple of things. First of all the "Uncaught SyntaxError: Unexpected token :" means the browser javascript engine is complaining about a colon ":" that has been put in the wrong place.

    The problem will most likely be in the returned JSON. Since whatever the server returns will be run though the eval("{JSON HTTP RESULT}") function in javascript, the most likely thing is that your problem is in there somewhere.

    I've put your code on a little sencha test harness and found a couple of problems with it.

    First: My browser was not too happy with the "squiggly ã" in location: 'São+Paulo+-+SP', so I had to change this to location: 'Sao+Paulo,+Brazil', which worked and returned the correct results from the audioscribbler API.

    Second: I notice you added a callback: 'callback', line to your request parameters, which changes the nature of the HTTP result and returns the JSON as follows:

    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
    

    Instead of doing that I think you should be using the callbackKey: 'callback' that comes with the example in http://dev.sencha.com/deploy/touch/examples/ajax/index.js.

    Something like this for example:

       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;
                    // ...
                }
            });
    

    That worked for me so hopefully it'll work for you too. Cherio.

    0 讨论(0)
提交回复
热议问题