javascript - 在主干中提交表单时触发了多个相同的 ajax 请求?

标签 javascript backbone.js

我正在使用 backbone 开发一个网络应用程序。在我的主干 View 中,我正在使用事件表单提交。第一次加载 View 时,表单提交就可以了。但是当我在路由器之间切换然后提交我的表单时,它会发送多个相同的 ajax 请求。

我的观点如下..

var View_AdvanceSearchArea = Backbone.View.extend({
    el: '.page',
    events: {
        'change #genderID': 'genderChange',
        'change #areaID': 'areaChage',
        'submit #advanceSearchForm': 'formSubmit'
    },
    genderChange: function() {
        $.ajax({
            url: 'getBodyHeightByGender',
            type: 'POST',
            data: '&genderID=' + $('#genderID').val(),
            success: function(res) {
                $('#bodyHeightID').html(res);
            }
        });
        $.ajax({
            url: 'getAgeByGender',
            type: 'POST',
            data: '&genderID=' + $('#genderID').val(),
            success: function(res) {
                $('#seventhDigitID').html(res);
            }
        });
    },
    areaChage: function() {
        $.ajax({
            url: 'getSubAreaByArea',
            type: 'POST',
            data: '&areaID=' + $('#areaID').val(),
            success: function(res) {
                $('#subAreaID').html(res);
            }
        });
    },
    formSubmit: function(e) {
        e.preventDefault();
        var formData = $('#advanceSearchForm').serializeArray();
        var vAdvanceSearchResult = new View_AdvanceSearchResult();
        vAdvanceSearchResult.render(formData);
    },
    render: function() {
        var $this = this;
        var mAdvanceSearchForm = new Model_AdvanceSearchForm();
        mAdvanceSearchForm.fetch({
            success: function(res) {
                var template = _.template($('#advance_search_area').html(), {res: res.attributes});
                $this.$el.html(template);
            }
        });
    }
});

问题是什么? 有什么帮助吗?

最佳答案

当您调用 View 时,它的事件每次都会绑定(bind)到 DOM 元素。 初始化 View 时,您必须从 DOM 元素取消委托(delegate)事件。

在您的 View 中尝试以下代码..

var View_AdvanceSearchArea = Backbone.View.extend({
    el: '.page',
    initialize: function() {
        $(this.el).undelegate('#advanceSearchForm', 'submit');
        $(this.el).undelegate('#genderID', 'change');
        $(this.el).undelegate('#areaID', 'change');
    },
    //here is your rest of code 

希望它对你有用..

关于javascript - 在主干中提交表单时触发了多个相同的 ajax 请求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18534546/

相关文章:

javascript - 使用 JS/Jquery 检测 URL 的更改(不仅仅是哈希)

javascript - 在 JavaScript 中存储 HTML 标记中的第 n 个类名

javascript - Bundle.js 在命令之后没有创建 - Node

javascript - 为什么 `this` 指的是全局对象?

javascript - 当我单击 X 时,为什么所有项目都会从 Backbone.js View 中删除

javascript - 状态已在 componentWillReceiveProps 中显示为更新为新值。现在有办法检查 Prop 变化吗?

javascript - 如何在 Knockout.js 中模型和 View 之间转换数据?

javascript - 未找到隧道 URL,回退到 LAN URL

javascript - 使用每个主干同步请求发送 token

javascript - 使用主干模板动态设置 img 标签的 'src'