2017-03-21 12 views
0

送信ボタンを押した後にデータを送信するフォームがあります。必要に応じていくつかの入力フィールドにタグを付けた後、送信ボタンを押した後に必要なフィールドに入力がない場合、フォームは常に私に表示されます。フォームの送信が成功した後のリダイレクト

私が気づいておきたいのは、提出が成功した場合、別のページにリダイレクトすることです。空白の必須フィールドがある場合は、別のページにリダイレクトせずにフォームに表示されます。今では

私は、次のコードを持っている:

は、[送信]ボタンを:

<div class="form-group"> 
    <div class="col-sm-offset-2 col-sm-10"> 
    <button type="submit" name="submityes" id="submityes" class="btn btn-danger">Submit</button> 
     </div> 
    </div> 

また、私はフォームを送信すると、別のページに私をリダイレクトするために、次のJS機能を持っています。

$('document').ready(function() { 
"use strict"; 
$(function() { 
    $('#submityes').click(function() { 
     $.ajax({ 
      type: "POST", 
      /*url: "process.php", //process to mail 
      data: $('form.contact').serialize(),*/ 
      success: function (msg) { 
       window.location.replace("/submit_resolved.php"); 
      }, 
      error: function() { 
       alert("error"); 
      } 
     }); 
    }); 
}); 

});

私が今問題としている問題は、すべての必須フィールドが完全であるかどうかにかかわらず、常に「submit_resolved.php」ページにリダイレクトされることです。

どのように私はこの問題を解決することができますか?すべての必須フィールドが空でない場合にのみリダイレクトする必要があります。

+1

あなたの現在のコードは、*フォーム*を提出していない、それは最初の検証を一切行わずにAjaxリクエストを行います。標準(非Ajax)のフォーム提出を行い、PHP内のリダイレクトを処理するのはなぜですか? – nnnnnn

+0

イベントリスナーを変更して、フォームの 'submit'を聞き、次にHTML要素で' required'属性を使用することができます.... eventListenerを次のように変更した場合、 'event.preventDefault();'フォームを聞いて、フォームがデフォルトのアクション 'post'をしないようにしてください。フォームタグでフォームをラップするかもしれません.... – NewToJS

+0

ありがとうございます。どのように私はajaxなしでコードを行うことができますか?そして、それをajaxでやっているのと違うのは何ですか? –

答えて

1

にあなたはsubmitイベント、ないclickイベントにバインドする必要がありませんフォームは有効です。

submitイベントはフォームによってトリガーされますが、clickイベントはinput要素によってトリガーされます。

+0

ありがとうございます。私はセレクタを '#submityes'から別のものに変更する必要があります。残念ながら、そこに書き込む式はわかりません。 –

+0

ああ、私はそれを得たと思う。私はフォームに名前/ id "webform"を付け、括弧の中に '#submityes'の代わりに '#webform'を書いた。今私は別の小さな問題があります:フォームは2つの異なる送信ボタン( '#サブミット'と '#サブミット')を持っています。どちらもユーザーを別のページにリダイレクトする必要があります。これをコードにどのように実装できますか?それは "#submitno"経由で提出された場合、 '#webform'が '#submityes'経由でXにリダイレクトされた場合、Y ' –

+0

@TimKühnにリダイレクトされますか? –

1

でリダイレクトを行います。 submitイベントは場合にのみトリガされるコメントに一致するように更新

$(function() { 

    var submityesClicked; 

    //catch the click to buttons 
    $('#submityes').click(function() { 
     submityesClicked = true; 
    }); 
    $('#submitno').click(function() { 
     submityesClicked = false; 
    }); 

    $('#webform').submit(function (e) { 
     e.preventDefault();//prevent the default action 

     $.ajax({ 
      type: "POST", 
      /*url: "process.php", //process to mail 
      data: $('form.contact').serialize(),*/ 
      success: function (msg) { 
       window.location.replace(submityesClicked ? "/submit_resolved_yes.php" : "/submit_resolved_no.php"); 
      }, 
      error: function() { 
       alert("error"); 
      } 
     }); 
    }); 
}); 

成功

$('document').ready(function() { 
"use strict"; 
$(function() { 
    $('#submityes').click(function() { 
     $.ajax({ 
      type: "POST", 
      /*url: "process.php", //process to mail 
      data: $('form.contact').serialize(),*/ 
      success: function (msg) { 
       //window.location.replace("/submit_resolved.php"); 
      }, 
      complete: function() { 
       window.location.replace("/submit_resolved.php"); 
      } 
      error: function() { 
       alert("error"); 
      } 
     }); 
    }); 
}); 
+0

フォームは、フォームが正常に検証されなかった場合はリダイレクションを必要としません(必須フィールドが空白の場合はリダイレクトされません)。 – nnnnnn

+0

多分私の誤解...しかし、まずは検証する必要があります。提出する前に、ajax経由でリクエストを送信し、レスポンスを受け取ったら、okと処理がすべて成功したかどうかを確認してください。すべてOKならば、ユーザーをリダイレクトする必要があります。私は正しい? –

0

process.phpでフォームの検証を行っていると仮定して、process.phpから検証が失敗した場合はエラーを返す必要があります。

header('HTTP/1.1 500 Internal Server Booboo'); 
header('Content-Type: application/json; charset=UTF-8'); 
die(json_encode(array('message' => 'ERROR', 'code' => 1337))); 

チェックこのリンク:これはあなたに役に立つかもしれReturn errors from PHP run via. AJAX?

希望。それは、HTML5属性なので何JavaScriptは必要ありません

<form action="/action_page.php"> 
    Username: <input type="text" name="usrname" required> 
    <input type="submit"> 
</form> 

:あなたが行うことができます

0

最も簡単な方法は、「必要」属性あなたへの入力elements.Exampleを追加することです。また、すべての主要なブラウザでサポートされています。あなただけのフロントエンド検証に頼るべきではありません、とにかく

http://caniuse.com/#search=required

:このリンクをチェックしてください。バックエンドの入力も確認してください。

+0

どうしますか?バックエンドの観点から有効ではありませんか? –

+0

これは別の質問 –

0
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
<div class="form-group"> 
    <div class="col-sm-offset-2 col-sm-10"> 
     <form action=""> 
      Username: <input type="text" id="usrname" required> 
      <button type="button" name="submityes" 
      id="submityes" class="btn btn-danger">Submit</button> 
     </form> 
    </div> 

function isValid(){ 
    var usrname = $("#usrname").val(); 
    if(usrname == ""){ 
     return false; 
    } 
    return true; 
} 
$(function() { 
    $('#submityes').submit(function() { 
    if(isValid() == true){ 
     $.ajax({ 
      type: "POST", 
      /*url: "process.php", //process to mail 
      data: $('form.contact').serialize(),*/ 
      success: function (msg) { 
       alert("success"); 
       window.location.replace("/submit_resolved.php"); 
      }, 
     }); 
     }else{ 
     alert("error"); 
     } 
    }); 
}); 
+0

ありがとうございます。関数isValid()はバックエンドの検証ですか?そして、私はこの関数に必要なすべての変数をチェックする必要がありますか? –

+0

できますフロントエンドとバックエンドの両方で –

+0

がforループ内でform.elemetsを使用してフォームのすべての要素を検証できます –

関連する問題