2011-10-11 39 views
1

我使用下面的代碼通過ajax驗證和發佈表單數據。Ajax驗證問題

問題是,如果在驗證過程中發生錯誤,它不會中斷髮布。這裏是我的代碼

var autoSaveInterval = null; 
var counter = 0; 

function call() { 
    postViaAjax(true) 
} 

function postViaAjax(autosaveMode) { 
    var name = $("#name").val(); 
    var title = $("#title").val(); 
    var menu = $("#menu").val(); 
    var parentcheck = $(".parentcheck:checked").val(); 
    var id = $("#id").val(); 
    var author_id = $("#author_id").val(); 
    if (parentcheck == 0) { 
     var parent = parentcheck; 
    } else { 
     var parent = $("#parent").val(); 
    } 
    var content = CKEDITOR.instances['content'].getData(); 
    content = encodeURIComponent(content); 
    var dataString = 'name=' + name + '&title=' + title + '&menu=' + menu + '&parentcheck=' + parentcheck + '&id=' + id + '&parent=' + parent + '&content=' + content + '&author_id=' + author_id; 
    $.ajax({ 
     type: "POST", 
     url: "processor/dbadd.php", 
     data: dataString, 
     dataType: "json", 
     success: function (result, status, xResponse) { 
      var message = result.msg; 
      var err = result.err; 
      var now = new Date(); 
      if (message != null) { 
       if (autosaveMode) { 
        $('#submit_btn').attr({ 
         'value': 'Yadda saxlanıldı ' + now.getHours() + ':' + now.getMinutes() + ':' + now.getSeconds() 
        }); 
       } else { 
        $.notifyBar({ 
         cls: "success", 
         html: message + ' ' + now.getHours() + ':' + now.getMinutes() + ':' + now.getSeconds() 
        }); 
       } 
      } 
      if (err != null) { 
       $.notifyBar({ 
        cls: "error", 
        html: err 
       }); 
      } 
     } 
    }); 
}; 



function validate() { 
    var name = $("#name").val(); 
    if (name == "") { 
     $.notifyBar({ 
      cls: "error", 
      html: "Səhifənin qısa adını daxil edin" 
     }); 
     return false; 
    } 
    var title = $("#title").val(); 
    if (title == "") { 
     $.notifyBar({ 
      cls: "error", 
      html: "Səhifənin geniş adını daxil edin" 
     }); 
     return false; 
    } 
    var menu = $("#menu").val(); 
    if (menu == "") { 
     $.notifyBar({ 
      cls: "error", 
      html: "Səhifə harada yerləşəcək? Mütləq birini seçin" 
     }); 
     return false; 
    } 

    var parentcheck = $(".parentcheck:checked").val(); 
    var parent = $("#parent").val(); 
    if (!$(".parentcheck").is(":checked")) { 
     $.notifyBar({ 
      cls: "error", 
      html: "Ayrıca yoxsa hansısa başlıq altında? Mütləq birini seçin" 
     }); 

     return false; 
    } else if (parentcheck == '1') { 
     if (parent == '0') { 
      $.notifyBar({ 
       cls: "error", 
       html: " Parent səhifəni seçin" 
      }); 
      return false; 
     } 
    } 

    return true; 
} 

$(document).ready(function() { 

    $('.autosave').hide(); 
    $("#add_form").submit(function (e) { 
     if (counter === 0) { 
      if (validate()) { 
       $('.autosave').show(); 
       counter++; 
      } 
     } 
     postViaAjax(false) 
     e.preventDefault(); 
    }); 


    $('#autosave').click(function() { 
     if ($(this).is(':checked')) { 
      if (autoSaveInterval) { 
       clearInterval(autoSaveInterval); 
      } 
      autoSaveInterval = window.setInterval(call, 5000); 

     } else { 
      $('#submit_btn').attr({ 
       'value': 'Yadda saxla' 
      }); 
      if (autoSaveInterval) { 
       clearInterval(autoSaveInterval); 
       autoSaveInterval = null; 
      } 
     } 
    }); 

}); 

如何解決這個問題?我想只顯示消息,打破張貼

回答

3
使用

更改 「提交」 功能:

$("#add_form").submit(function (e) { 
    if (counter === 0) { 
     if (validate()) { 
      $('.autosave').show(); 
      counter++; 
     } 
     else // Add this: 
      return false; 
    } 
    postViaAjax(false) 
    e.preventDefault(); 


}); 

這會幫助你

+0

非常感謝你。上帝祝福你。這一次回報讓我發瘋。這段時間我一直擔心。如果您使用任何IM,請給我您的聯繫方式。 –

+0

不客氣。 [email protected] – AmGates

1

更改「提交」功能:

$("#add_form").submit(function (e) { 
    if (counter === 0) { 
     if (validate()) { 
      $('.autosave').show(); 
      counter++; 
     } 
    } 
    postViaAjax(false) 
    e.preventDefault(); 

    // Add this: 
    return false; 
}); 
+0

它並沒有幫助。仍然在錯誤消息 –

+0

之後直接看到成功消息通過說「仍然看到成功消息」,您的意思是您正在重定向? (或者顯示一個ajax消息) –

+0

如果你已經閱讀過我的js,在ajax post之後有關於成功的消息,我首先看到錯誤消息,然後看到成功消息(它發佈了measn ajax)並用螢火蟲跟蹤整個過程。這裏是scrshot http://prntscr.com/3fqm7 –

0

其他選項可以是發佈數據,Web服務器之前,使用jQuery驗證插件。 並在Java腳本文件

$("#Form").validate(); 
+0

我已經爲我的表單寫過驗證,爲什麼要重寫整個這個東西,如果有一個地方丟失回報或其他東西? –