Backbone模型保存会触发Chrome / FF上的错误回调

时间:2012-04-12 01:11:27

标签: ajax asp.net-mvc-3 backbone.js

Noob问题:

我正在使用ASP.NET MVC 3而我正在尝试通过Backbone保存实体。这就是我所拥有的:

我将Backbone模型(程序)定义为:

var Program = Backbone.Model.extend({

    defaults: function () {
        return { name: "" };
    },

    initialize: function (attrs) {
        this.set('name', attrs.name);
    },

    urlRoot: '/program/add'

});

然后我将模型连接起来,除了按钮的点击事件:

$('.add-program').click(function () {
    var programName = $('.program-name').val();
    var program = new Program({ name: programName });
    program.save(null, {
        success: function (model, response) {
            alert('success');
        },
        error: function (model, response) {
            alert('error');
        } 
    });
});

它适用于IE(令人惊讶!) - ProgramController.Add(字符串名称)被称为正常,我获得成功响应。但是我在Chrome和FF上遇到了问题 - 它们都触发了错误回调,但在Chrome上我的控制器动作甚至根本没有被击中(虽然它在FF上有所不同)。有趣的是,我的动作断点确实被FF击中,具有适当的参数值,但仍然得到错误回调。

我不确定这里发生了什么。我尝试通过Firebug / Chromebug进行调试,并且在错误回调参数上没有看到太多(errorStatus只是......好吧......“错误”!)。我也试过看网络选项卡和小提琴手,我没有看到任何响铃的声音(也许我没看到正确的地方)。我也试过对控制器执行一个直接的jquery ajax调用,但仍然会得到同样奇怪的行为。

以防万一,这是MVC行动(虽然我认为问题不在这里):

[HttpPost]
public JsonResult Add(string name)
{
    var stubbedResponse = new {id = Guid.NewGuid()};
    return Json(stubbedResponse);
}

任何可能导致此问题的想法?

1 个答案:

答案 0 :(得分:1)

使用您的客户端代码的小提琴http://jsfiddle.net/Uj5Ae/2似乎没问题。你服务器响应的东西?或Backbone和Underscore版本不匹配?
或者,如果事件传播未在其他地方处理,则可能在单击处理程序结束时返回false。

剧透:这是事件传播:)