2017-07-31 20 views
0

私は解決できないような問題があります。関連性のある最初のコンテキスト。Ajax、JQuery Validation、MVC

私のソフトウェアのためのMVCのようなフレームワークを構築しています。私は、すべての入力フォームがajax経由でバックエンドコントローラにデータを送信し、データをルーティングし、適切なデータベースに入力するようにします。すべてのHTMLコードはPHPクラスから生成され、JavaScriptはPHPクラスから生成されます。

私が抱えている問題は、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();