2016-09-07 46 views
0

我想与服务器同步主干模型,并在从服务器接收到成功响应时执行一些操作。发送PUT请求并且响应statusCode为200,但响应正文为空。成功回调仅在响应不为空时才会被调用。后端团队不会给我任何回应。那么是否有比检查错误回调中的状态码更好的解决方案?更“正确”?下面是代码:Backbone保存请求中的呼叫成功回调

var settingService = Backbone.Model.extend({ 
     "url": "usersettings", 
     "sync": function(method) { 
      if (method === "create") { 
      arguments[0] = "update"; 
      } 
      return Backbone.sync.apply(this, arguments); 
     }, 
     }); 


     var SettingsView = Backbone.View.extend({ 
     initialize: function() { 
      this.services = { 
      "userSettingsService": new settingService() 
      }; 
     }, 
     saveSettings: function() { 
      this.services.userSettingsService.save({ 
      "currency": "USD", 
      "dateFomat": "DD-MM-YYYY" 
      }, { 
      "success": function(model, response) { 
       console.log("it will not log anything"); 
      }, 
      "error": function(model, response) { 
       if (response.statusCode === 200) { 
       console.log("but will log here"); 
       } 
      } 
      }) 
     } 
     }); 

     var settings_view = new SettingsView(); 

     settings_view.saveSettings(); 

http://jsfiddle.net/ovg3kyqz/7/ - 它不会重现该问题,因为我不知道如何安装jsfiidle corretcly(如果它甚至有可能),为我的工作ENV回应。只是为了表明代码是否工作正常

回答

1

的成功处理程序应该被称为一个空PUT响应,我已经分叉您的jsfiddle这里: http://jsfiddle.net/tbvw4cbm/

var settingService = Backbone.Model.extend({ 
    "url": "http://www.mocky.io/v2/57d018e41000004c00208c95", 
    "sync": function(method) { 

我已经使用设置端点http://www.mocky.io/和CORS响应标头(这样的jsfiddle可以评估它):

  • 访问控制允许来源:http://fiddle.jshell.net
  • 访问控制-A llow的方法:PUT
  • 访问控制允许报头:Content-Type的

但关键的一点是,响应主体是空的,如果检查中的jsfiddle Ajax请求,你可以看到, 。