为什么我的代码会多次触发

时间:2014-10-16 08:44:28

标签: javascript jquery ajax

我从$(document).ready(function() {

调用了以下内容
  $('#file_upload_form').submit(function(){
    // show loader [optional line]             
    //if(document.getElementById('upload_frame') == null) {
      // create iframe
      $("#upload_list_button").hide();
      $("#loading_icon_upload_addresses").show();
      $('body').append('<iframe style="display: none" id="upload_frame" name="upload_frame"></iframe>');
      $('#upload_frame').on('load',function() {
        $("#upload_frame").unbind('load');
        if($(this).contents()[0].location.href.match($(this).parent('form').attr('action'))){
          // display server response [optional line]
          var html_return = $(this).contents().find('html').html();

          if ( html_return.indexOf("Error") > -1 ) {
            $('#server_response').css("background-color", "#FFDEDE");   
          }

          if ( html_return.indexOf("Success") > -1 ) {
            $('#server_response').css("background-color", "#EEFCED");   
          }

          $('#server_response').html(html_return);

          args = {
            ajax_token : getAjaxToken(),
            client : $("input[name=client]").val(),
            address_type : address_type
          }
          loadAddressList(args);
          $("#upload_list_button").show();
          $("#loading_icon_upload_addresses").hide();
        }
      })
      $(this).attr('method','post');    
      $(this).attr('enctype','multipart/form-data');    
      $(this).attr('target','upload_frame').submit();                        
    //}
  });

我基本上是尝试使用iframe上传文件来进行上传(发现它太难以进行异步)。

Firebug显示将近100个请求被触发。为什么这样?触发的ajax代码是loadAddressList(args);

2 个答案:

答案 0 :(得分:1)

提交表单时正在执行您的代码,但代码的最后一行会再次提交表单。

答案 1 :(得分:1)

提交表单时,提交处理程序将触发。在提交处理程序(代码的最后一行)中,您将再次提交表单。这会引发另一个提交处理程序,这会产生一个无限循环。

尝试在提交处理程序的第一行使用e.preventDefault();,以确保只提交一次表单。