2017-07-31 40 views
0

我有一個問題,我似乎無法來解決。首先可能相關的一些背景。阿賈克斯,jQuery驗證和MVC

我建立一個MVC樣(我說「喜歡」,因爲我仍然在學習如何MVC的作品),我的軟件PHP框架。我希望所有輸入表單都通過ajax將數據提交給後端控制器,後者將數據路由並將其輸入到相應的數據庫中。所有的HTML代碼都是通過php類和通過php類包含的JavaScript生成的。

我遇到的問題是用AJAX功能。當我希望它異步提交時,它會繼續嘗試正常提交發布請求。我已經在各個時間點正常工作,但是當我改變框架的各個方面時,它似乎中斷了。我試過了各種各樣的「form.preventDefault()」和「return false」的組合,但它似乎並不重要。驗證部分工作(不會使用無效條目提交,使用this插件)。我發現JavaScript緩存本身,並且通過將版本號附加到文件名來解決這個問題。

這裏是Ajax代碼。它向用戶返回關於請求狀態的消息。任何想法爲什麼它拒絕提交異步?

  $(document).ready(function() { 
      // Initialize form validation 
    ***old code 
$("form[name='ajaxform']").validate({ *** 
     // Specify validation rules 

    ***Updated code 
     $('#ajaxsubmit').on('click', function() { 


     $("#ajaxform").valid(); 
    }); 
    // Initialize form validation 
$('#ajaxform').validate({ *** 


    ....[omitting the validation rules for brevity] 

     errorElement : 'div', 
     errorLabelContainer: '#usermessage', 

    submitHandler: function(form) { 
     $.ajax({ 
      cache : false, 
      url  : $(form).attr('action'), 
      type : 'POST', 
      dataType: 'text', 
      data : $(form).serialize(), 
      success : function(data) { 
       var response = $.parseJSON(data); 
       if(response['error']){ 
        $('#usermessage').html(response['error']); 
        }else{ 
        if(response['success']){ 
        $('#usermessage').css({"color":"#00b300","font-weight":"bold"}); 
        $('#usermessage').html(response['success']); 
        } 
        } 
       }, 
       error : function(err) { 
          alert(err); 
       } 
      });  
    return false; 
    } 
    }); 

    }); 
+0

@shamelessApathy,因爲驗證插件響應表單提交,你會怎麼觸發的插件,如果你改變了按鈕類型「按鈕,」你說什麼? – AppreciateCo

+0

我剛剛發現了這個。 https://www.google.com/url?sa=t&source=web&rct=j&url=https://stackoverflow.com/questions/13671710/jquery-form-validation-on-button-click&ved=0ahUKEwjH3P75k7TVAhVV2GMKHYViD-AQFggeMAE&usg=AFQjCNE9Q6JDrlG0zgDxgSCvEuoLggLruw。我會嘗試並回復你。謝謝! – AppreciateCo

回答

0

以下是我如何處理表單試圖提交的問題,即使我試圖preventDefault()。

我還沒有看到你的HTML標記,所以我不能肯定。

如果你有它

<button type='submit'>Submit</button> 

更改爲

<button type='button'>Submit</button> 

,然後監聽按鈕點擊使用JavaScript,而不是一個表單提交

+0

我試着改變提交按鈕來輸入「按鈕」並更新我的代碼,就像它在我提供的鏈接中描述的那樣。雖然它不再正常提交(謝謝),並且不會觸發ajax函數。任何想法爲什麼?我會更新我的代碼。 – AppreciateCo

0

您可以更改處理程序:

submitHandler: function(form) { 

要處理的事件,以及:

submitHandler: function(form, event) { 
    event.preventDefault();