为什么这个ajax调用使用jQuery而不是backbone.sync

时间:2014-02-11 14:11:55

标签: jquery ajax backbone.js

在开始之前,我知道响应不是jsonp,而是json。

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

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

但是,当我与骨干网进行完全相同的调用时,我会收到错误“Uncaught SyntaxError:Unexpected token:”(即,它不是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;

});

根据我的理解,Backbone使用jQuery.ajax作为所有ajax调用的基础方法,我认为它们的行为相同,但显然不是这样。

谢谢

1 个答案:

答案 0 :(得分:1)

您的Backbone版本缺少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/