3

AJAX/JQuery와 함께 Visual Studio 2010 및 MVC 3을 사용하고 있습니다. 내가 가지고있는 문제는 코드가 무언가를 두 번 게시한다는 것입니다. 당신이 무언가를 올렸을 때만 일어난다. 그런 다음 다시해라.MVC 3 AJAX 함수 두 번 게시

$(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 페이지가 CreateCommentPartial.cshtml 파일을 호출하는 JQuery와 대화 상자가 있습니다 :

여기 내 JS입니다. 사용자가이를 채울 때 "CreateComment"함수를 호출하고 "GetComments"함수를 호출하고 새 함수가 게시 된 후 주석을 새로 고칩니다.

이제 문제가 있습니다. 페이지를 다시로드하고 양식을 채우지 않고 "Create Comment"링크를 다시 클릭하면 "CreateComment"가 두 번 실행되고 "GetComments"도 두 번 실행됩니다. 방화 광이 나에게도 이것을 보여줍니다.

여기서 내가 뭘 잘못하고 있니? 게시 한 후 페이지 (F5)를 다시로드하면이 작업이 수행되지 않습니다. 그러나 그것은 그 목적을 이깁니다. 페이지를 다시로드하지 않고도 여러 번 의견을 제출할 수 있어야합니다.

답변

1

위의 스크립트를 어디에서 선언하셨습니까? 부분보기로 페이지에 추가 된 스크립트에서 비슷한 문제가 발생했습니다. 어떻게 든 스크립트는 버튼을 클릭 할 때마다 페이지에 추가되어 스크립트와 게시물 (스크립트의 각 사본이 한 번 실행되는 횟수)을 곱합니다. 스크립트를 별도의 .js 파일에 넣고 마스터 페이지에서 참조하여이 문제를 해결했습니다.

+0

스크립트는 위의 자바 스크립트 파일에 있습니다. 공유 폴더의 _Layout.cshtml 파일 헤더에 스크립트를 선언했습니다. –

+0

혼자서 대답을 찾았습니다. "form.unbind ('submit');"을 추가해야합니다. 전에 form.submit –

0

문제는 두 번 호출되는 메서드로 인해 발생합니다. 제어 할 이벤트.

예 :

var $isActualizaComentarioEventoAsignado = false; 

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