在Backbone保存请求上调用成功回调

时间:2016-09-07 12:06:29

标签: javascript backbone.js

我希望将骨干模型与服务器同步,并在从服务器收到成功响应时执行一些操作。发送PUT请求并且响应statusCode为200但响应正文为空。仅当响应非空时才会调用成功回调。后端团队不会向我发送任何回复。那么有没有比检查错误回调中的状态代码更好的解决方案。更“正确”?这是代码:

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(如果它甚至可能)在我的工作环境中作出响应。只是为了表明代码工作正常

1 个答案:

答案 0 :(得分: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可以评估它):

  • Access-Control-Allow-Origin:http://fiddle.jshell.net
  • 访问控制 - 允许 - 方法:PUT
  • Access-Control-Allow-Headers:Content-Type

但关键是响应体是空的,如果你在jsfiddle中检查ajax请求就可以看到它。