2014-02-11 39 views
0

我开始之前,我知道,反应不是JSONP,而是JSON。为什么用jQuery这个AJAX调用工作,但不backbone.sync

所以下面的代码产生的结果:

$.ajax({ 
    type: 'GET', 
    url: 'http://us.battle.net/api/wow/character/Alexstrasza/Leica?fields=items,stats,talents', 
    dataType: 'jsonp', 
    success: function(data){ 
     console.log(data); 

    }, 
    error: function() { console.log('Uh Oh!'); }, 
    statusCode: { 
     404: function() { 
      $().html("not working"); 
     } 
    }, 
    jsonp: 'jsonp' 
    }); 

然而,当我会做骨干完全相同的电话我得到的错误“未捕获的SyntaxError:意外的标记:”(即,它不是JSONP)

define([ 
'jquery', 
'backbone', 
'models/results/panel.model' 
], 
function(
    $, 
    Backbone, 
    PanelModel 
){ 

var BoxCollection = Backbone.Collection.extend({ 

    model: PanelModel, 

    url: function(){ 

     return "http://us.battle.net/api/wow/character/Alexstrasza/Leica?fields=items,stats,talents"; 

    }, 

    initialize: function(models, options){ 

     this.path = options.path; 
    }, 

    sync: function(method, model, options){ 
    options.timeout = 10000; 
     options.dataType = "jsonp"; 
    options.processData = true; 
    options.type = 'READ'; 
     options.url = this.url(); 
    return Backbone.sync(method, model, options); 

    }, 


    parse: function(resp, options){ 
     console.log(resp); 
    } 

}); 

return BoxCollection; 

});

从我的理解,骨干网使用jQuery.ajax作为所有Ajax调用底层方法,我会认为他们将采取行动一样,但显然那不是如此。

谢谢

回答

1

你的骨干版本缺少jsonp参数。尝试

sync: function(method, model, options){ 
    options.timeout = 10000; 
    options.dataType = "jsonp"; 
    options.processData = true; 
    options.type = 'READ'; 
    options.url = this.url(); 
    options.jsonp = 'jsonp'; 
    return Backbone.sync(method, model, options); 
} 

和演示http://jsfiddle.net/nikoshr/8A6n4/

+0

,就是这样,非常感谢你,先生。 (谷歌类型的人快速评论),options.jsonp是关键 –