Функция MVC 3 AJAX после двух раз - PullRequest
3 голосов
/ 25 февраля 2011

Я использую Visual Studio 2010 и MVC 3 с AJAX / JQuery.У меня проблема в том, что код публикует что-то дважды.Это происходит только когда вы публикуете что-то, а затем делаете это снова.

Вот мой JS:

$(document).ready(function () {
   BindEvents();
});

function BindEvents() {
$('#OpenCommentDialog').click(function (event, ui) {
    var id = $(this).attr('data');
    $('#NewCommentDialog').dialog({
        open: function (event, ui) {
            $('#BugID').val(id);
            var form = $('form', '#NewCommentDialog');
            form.submit(function (e) {
                var comment = form.serialize(true);
                CreateComment(comment);
                return false;
            });
        }
    });
    $('#NewCommentDialog').dialog('open');
    return false;
});
}

function CreateComment(comment) {
if (comment != null) {
    $.post('/Comments/Create/', comment, function (data) {
        if (data == 'Success') {
            var id = $.parseQuery(comment);
            GetComments(id.BugID);
            $('#NewCommentDialog').dialog('close');
        }
    });
}
}

function GetComments(id) {
$('#Comments').find('tr').remove();
$.getJSON('/Comments/GetComments', { id: id }, function (data) {
    if (data != null) {
        if (data.length > 0) {
            $('#CommentListTemplate').tmpl(data).appendTo('#Comments');
        }
    }
});
}

Моя HTML-страница имеет диалоговое окно JQuery, которое вызываетФайл CreateCommentPartial.cshtml.Когда пользователь заполняет его, он вызывает функцию «CreateComment», которая затем вызывает «GetComments» и обновляет комментарии после публикации нового.

Теперь вот проблема.Если вы снова нажмете ссылку «Создать комментарий», не перезагружая страницу и не заполнив форму, дважды будет запущен «CreateComment» и дважды «GetComments». Firebug также показывает мне это.

Что я здесь не так делаю?Если вы перезагрузите страницу (F5) после публикации, она этого не сделает.Но это побеждает цель.Нужно иметь возможность оставлять комментарии несколько раз, не перезагружая страницу.

Ответы [ 2 ]

1 голос
/ 26 февраля 2011

Где вы объявили вышеуказанный скрипт?У меня была похожая проблема со скриптом, который был добавлен на страницу при частичном просмотре.Каким-то образом скрипт добавлялся на страницу для каждого нажатия кнопки, таким образом, умножая скрипт и количество постов (каждая копия скрипта запускалась один раз).Я решил проблему, поместив скрипт в отдельный файл .js и ссылаясь на него на главной странице

0 голосов
/ 22 июля 2014

Проблема вызвана тем, что метод вызывается два раза, вы можете решить его с помощью переменной-переключателя, когда вы привели событие к управлению.

Пример:

 var $isActualizaComentarioEventoAsignado = false;

 if (!$isActualizaComentarioEventoAsignado) {
                $isActualizaComentarioEventoAsignado = true;
                $('#pepe').bind('clic', function(e) {});
}
...