2015-05-20 87 views
0

我正在构建一个简单的主干应用程序,并且在View中有成功回调函数的问题。 下面是一个代码调用成功回调函数

var EditUser = Backbone.View.extend({ 
     el: '.page', 
     render: function(option){ 
      var that = this; 
      if(option.id){ 
       that.user = new User({id : option.id}); 
       that.user.fetch({ 
        success:function(user){ 
         var template = _.template($("#edit-user-template").html()); 
         that.$el.html(template({user: user})); 
        } 
       }); 
      }else{ 
       var template = _.template($('#edit-user-template').html()); 
       that.$el.html(template({user: null})); 
      } 
     }, 
     events:{ 
      'submit .edit-user-form': 'saveUser', 
      'click .delete': 'deleteUser' 
     }, 
     saveUser: function(ev){ 
      var userDetails = $(ev.currentTarget).serializeObject(); 
      var user = new User(); 
      user.save(userDetails,{success: function(){ 
       router.navigate('',{trigger:true}); 
      }, 
      error: function(e){console.log(e);} 
      }); 
      return false; 
     }, 
     deleteUser:function(ev){ 
      this.user.destroy({ 
       success: function(){ 
        router.navigate('',{trigger:true}); 
       } 
      }) 
      return false; 
     }, 
     wait:true 
    }); 

在SaveUser功能,查询发送到服务器正确的,但在此之后,成功回调函数不叫,用于导航到应用程序的主页。 使用deleteUser方法会出现同样的问题。 任何想法是什么问题?谢谢!

+0

这是不够的信息。我们不知道user.save()做了什么。 – pmandell

+0

@pmandell它是一个Backbone.js模型,因此save()使用POST来与模型关联的URL。 – billjamesdev

+0

@ volodymyr3131是否调用了“错误”方法?看起来应该是这样或那样的成功之一。您能否在浏览器的调试网络面板中观看此网络事务(在Chrome中点击F12)并查看响应代码是否为200ish?或者,您可以在成功和错误方法中添加警报,以查看正在调用的内容。 – billjamesdev

回答

1

它可能与服务器的响应类型有关,期望的响应是将在您的属性上设置的JSON对象,但如果响应与“文本”不同,例如解析失败。

下面是一个使用模拟请求

https://jsfiddle.net/gvazq82/rdLmz2L2/1/用于演示一个小提琴:

$.mockjax({ 
    url: "hello.php", 
    responseTime: 0, 
    //responseText: 'A text response from mock ajax' 
    responseText: '{"a": "a"}' 
}); 

在这个例子中,误差函数被调用是不是在你的情况下发生的,是有可能您的应用程序定义“Ajax”调用的某些默认行为?

我需要更多的信息才能确定这个问题,但希望这给你一些问题的指导。

+0

是的!你对于响应类型是正确的。我改变了它的JSON,我所有的回调函数的作品!这个问题困扰了我好几个小时!谢谢! – volodymyr3131