Ajaxにおける複数の関数での処理
前提・実現したいこと
現在jQueryを用いたAjaxでアンケートフォームを作成しており、
各要素に変更が加わるか最後に送信する前にバリデーションチェックを行う方式をとろうとしています。
これは全部回答が終わってから戻ることを避け、かつ無回答で送信することを避けるためです。
この際各要素において、真偽値を返してエラーメッセージをechoする関数(Aとします)と
最終的な解答をechoする関数(Bとします)を用意し、
Aがtrueを返せばBが動くという方式で設計します。
尚、AとBにおいてechoする場所は異なります。
発生している問題・エラーメッセージ
この場合どのように2つの関数に同じ値を引数に入れるかが分からないです。
また、関数が依存しあっているため可能な限り同じファイルに1つにしてまとめたいです。
(上に書いた前提はまだ変えても問題ないです)
またそもそも調べてもどのような仕様にすべきかわからない状況です。
- 2018/4/7追記
その後euledge様の解答を参考に修正した所、jsonは値を生成しましたが出力が全く成されず、
バリデーションを行うPHPの関数はHTMLで値を入れているにもかかわらず値が入っていないと出力しております。
また、json自体はpタグの閉じタグでないものは全て表示されず、いくつかの値はそもそも表示すらされませんでした(空文字のままです)
尚、Chromeの検証やNetBeansを見る限り文法上のエラーは無いようです。
該当のソースコード
以下は全て仮のものです。また、
js
1$(function (){ 2 var b=[]; 3 $("[name='b[]']:checked").each(function(){ 4 b.push(this.value); 5 }); 6 var data={a:$("[name=a]").val(),b:b,c:$("[name=c]").val(),d:$("[name=d]").val(),e:$("[name=e]").val()}; 7 $(".a").change(function(){$.post("function-src.php",'json',data).done 8 (function(response){ 9 $("#a_valid").html(response.error_a); 10 $("#b_valid").html(response.error_b); 11 $("#c_valid").html(response.error_c); 12 $("#d_valid").html(response.error_d); 13 $("#e_valid").html(response.error_e);}); 14 }). 15 });
html
1 <span id="a_valid"></span> 2<p> 3 <input type="radio" name="a" value="a" id="a" class="a"><label for="a">A</label> 4 <input type="radio" name="a" value="b" id="b" class="a"><label for="b">B</label> 5 <input type="radio" name="a" value="c" id="c" class="a"><label for="c">C</label> 6 7</p> 8<!--この下にnameがbのチェックボックス(配列を用いるもの)、nameがcとdのプルダウンメニュー、nameがeのラジオボタンがあり 9これら全てにaというクラス属性があります。 10--> 11
php
1function valid_a($a) 2{ 3 4 $validation=false; 5 if (!isset($a)) { 6 $error_a = "<p style=\"color:#ff2800;\">入力されていません。</p>"; 7 } elseif (($a != "a") && ($a != "b") && ($a != "c")) { 8 $error_a = "<p style=\"color:#ff2800;\">不正なPOSTです。</p>"; 9 }else { 10 $validation=true; 11 $error_a=""; 12 echo json_encode(compact('error_a'));; 13 return $validation; 14 } 15} 16 17function valid_a_echo($a) 18{ 19 $a_echo =""; 20$a_ans=array("a"=>"A","b"=>"B","c"=>"C"); 21 if (valid_a($a)) { 22 $a_echo = $a_ans[$a]; 23 } 24 echo json_encode(compact('a_echo')); 25} 26function valid_b($b){ 27 28 $b2 = array(/*配列の中身*/); 29 $validation=false; 30 if (!in_array($b)) { 31 $error_b = "<p style=\"color:#ff2800;\">入力されていません。</p>"; 32 }else{ 33 for ($i = 0; $i <count($b) ; $i++) { 34 if ((intval($b[$i])<0||intval($b[$i])>count($b2)-1)&&!ctype_digit($b[$i])) { 35 $error_b = "<p style=\"color:#ff2800;\">不正なPOSTです。</p>"; 36 break; 37 } 38 } 39 if ($i == count($b) - 1) { 40 $validation=true; 41 $error_b=""; 42 } 43 } 44 echo json_encode(compact('error_b')); 45 return $validation; 46} 47 48function valid_b_echo($b) 49{ 50 $b = array(/*配列の中身*/); 51 $array=array(); 52 if (valid_b($b2)) { 53 for ($j = 0; $j <count($b) ; $j++) { 54 array_push($array,$b2[intval($b[$j])]); 55 } 56 } 57 $b_echo=implode(",",$array); 58 echo json_encode(compact('b_echo')); 59} 60 61function valid_c($c) 62{ 63 $validation=false; 64 if (!isset($c)) { 65 $error_c = "<p style=\"color:#ff2800;\">入力されていません。</p>"; 66 } elseif ((intval($c)<0||intval($c)>10)&&!ctype_digit($c)) { 67 $error_c = "<p style=\"color:#ff2800;\">不正なPOSTです。</p>"; 68 }else { 69 $validation=true; 70 $error_c=""; 71 } 72 echo json_encode(compact('error_c')); 73 return $validation; 74} 75 76function valid_d($d) 77{ 78 $validation=false; 79 if (!isset($d)) { 80 $error_d = "<p style=\"color:#ff2800;\">入力されていません。</p>"; 81 } elseif ((intval($d)<0||intval($d)>9)&&!ctype_digit($d)) { 82 $error_d = "<p style=\"color:#ff2800;\">不正なPOSTです。</p>"; 83 }else { 84 $validation=true; 85 $error_d=""; 86 } 87 echo json_encode(compact('error_d')); 88 return $validation; 89} 90 91function valid_d_echo($c,$d) 92{ 93 $d_echo =""; 94 if (valid_c($c)&&valid_d($d)) { 95 $d_echo = intval($c.$d); 96 } 97 echo json_encode(compact('d_echo')); 98} 99 100function valid_e($e) 101{ 102 $validation=false; 103 if (!isset($e)) { 104 $error_e = "<p style=\"color:#ff2800;\">入力されていません。</p>"; 105 } elseif ((intval($e)<0||intval($e)>9)&&!ctype_digit($e)) { 106 $error_e = "<p style=\"color:#ff2800;\">不正なPOSTです。</p>"; 107 }else { 108 $validation=true; 109 $error_e=""; 110 } 111 echo json_encode(compact('error_e')); 112 return $validation; 113} 114 115function valid_e_echo($e) 116{ 117 $e_array = array(/*配列の中身*/); 118 $e_echo =""; 119 if (valid_e($e)) { 120 $e_echo = $e_array[intval($e)]; 121 } 122 echo json_encode(compact('e_echo')); 123} 124$a=filter_input(INPUT_POST,'a'); 125valid_a($a); 126valid_b($b); 127valid_c($c); 128valid_d($d); 129valid_e($e); 130valid_a_echo($a); 131valid_b_echo($b); 132valid_c_echo($c); 133valid_d_echo($d); 134valid_e_echo($e); 135/*valid_a_echo($a)が出力する値はvalid_a($a)の値が出力される場所ではないです。 136今回はvalid_a~valid_eまでについて質問致します。*/
回答2件
あなたの回答
tips
プレビュー