質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
CakePHP

CakePHPは、PHPで書かれたWebアプリケーション開発用のフレームワークです。 Ruby on Railsの考え方を多く取り入れており、Railsの高速性とPHPの機動性を兼ね備えています。 MVCやORMなどを「規約優先の考え方」で利用するため、コードを書く手間を省くことができます。 外部のライブラリに依存しないので、単体での利用が可能です。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

Ajax

Ajaxとは、Webブラウザ内で搭載されているJavaScriptのHTTP通信機能を使って非同期通信を利用し、インターフェイスの構築などを行う技術の総称です。XMLドキュメントを指定したURLから読み込み、画面描画やユーザの操作などと並行してサーバと非同期に通信するWebアプリケーションを実現することができます。

Q&A

解決済

1回答

3574閲覧

ajax通信で値を取得して判別処理を行いたい

mikky

総合スコア12

CakePHP

CakePHPは、PHPで書かれたWebアプリケーション開発用のフレームワークです。 Ruby on Railsの考え方を多く取り入れており、Railsの高速性とPHPの機動性を兼ね備えています。 MVCやORMなどを「規約優先の考え方」で利用するため、コードを書く手間を省くことができます。 外部のライブラリに依存しないので、単体での利用が可能です。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

Ajax

Ajaxとは、Webブラウザ内で搭載されているJavaScriptのHTTP通信機能を使って非同期通信を利用し、インターフェイスの構築などを行う技術の総称です。XMLドキュメントを指定したURLから読み込み、画面描画やユーザの操作などと並行してサーバと非同期に通信するWebアプリケーションを実現することができます。

0グッド

1クリップ

投稿2019/07/30 04:33

現在、ajaxについて勉強しています。
用意したテキストボックスの中身をajax通信を使ってチェックしたい
箇所があるのですが、そこで詰まってしまって困っています。
ソースコードは以下となります。
よろしくお願いします。

###前提・実現したいこと
ajax通信でテキストボックスに入力された値をDBに格納してある値と比較し、
もし同じ値が存在していたらエラーメッセージを出力させ、登録させない。
存在していないなら登録、保存する。

###発生している問題・エラーメッセージ
ajaxでphp側に入力された値を渡し、DBを使って存在チェックをして
その結果がtrue、falseで返却されてくる。
その結果をもってしてエラーメッセージを出すか出さないか判別させたいのだが、
php側から返却された値がtrueでもfalseでも設定したエラーメッセージ
「他のコードを入力して下さい。」が表示され、DBに存在しない値の登録もできない。

###該当のソースコード
該当のテキストボックスのclassはjv-code-valid-ajaxとhtml側で定義してある。
php側は省略(渡された値をDBへ問い合わせしてEXISTSで存在チェックしているだけ。)

(JQuery) $.validator.addMethod('codecheck', function (value, input) { if (value) { $.ajax({ url: 'XXXXXXXXXXXXX', type: 'POST', data: { code: value }, dataType: 'JSON' }) .done (function(data, textStatus, jqXHR) { if (data) { // データが存在していた場合はエラー return false; } // データが存在していない場合は保存可能 return true; }) .fail (function(jqXHR, textStatus, jqXHR) { }); } }); $.validator.addClassRules({ 'jv-code-valid-ajax': {codecheck: true} }); $.extend($.validator.messages, { codecheck: '他のコードを入力して下さい。' });

###試したこと
done で返却されたdataの中身をconsole.logで表示させてみると
true、またはfalseが入っているので値としては取得できている。
doneの中では比較処理が上手くできない?
return trueを返そうがreturn falseを返そうが
「他のコードを入力して下さい。」が表示されてしまう。

###補足情報(言語/FW/ツール等のバージョンなど)
Apache/2.4.37 (Amazon)
PHP 7.1.25
CakePHP version 3.3.9

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

addMethod同期的な処理にしか対応していませんので、バリデーション内部でAjaxを呼んでも、単に無視されます。

remoteというメソッドがあるようですので、それを使うのがいいかもしれません(リンク)。

投稿2019/07/30 04:37

maisumakun

総合スコア145184

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mikky

2019/07/30 06:31

お答えいただきありがとうございます。 addMethodは同期的な処理にしか対応していないんですね。 知りませんでした。いくらやってもダメなわけですね。 リンク先も見てみました。ありがとうございます。 単純に「$.ajax」部分を「$.remoto」にする、という単純な直しでは…ないですよね。(上手くはできなかったのですが…。)
mikky

2019/08/27 01:33

addMethodでは同期的な処理にしか対応していないということだったので 「async: false」をJS内で指定することで同期通信にすることで解決しました。 (あまりこの指定はしたくなかったですが。) $.ajax({ url: 'XXXXXXXXXXXXX', type: 'POST', data: { code: value }, dataType: 'JSON', async: false })
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問