前提・実現したいこと
パスワードが一致したら、データベースにデータを挿入し、挿入が完了したら以後の更新を終了する処理を開発しています。
ajax の中身の処理の終了後(入力したパスワードが一致しているかの判定)、ページを更新しないとデータベースに挿入した結果が反映されないため、.doneでajax内部の処理後にページ更新をしようと思っているのですが、うまくいきません。
これは元々の仕様で更新ができない、または前後関係によりできない状態なのでしょうか。
知恵を貸していただけたら幸いです。
よろしくお願いします。
9/1追記
fileNameは、データベース側の主キー(ID)をファイルの名前として使っています。
$fileName = basename($_SERVER['SCRIPT_NAME'],".php");
一部オリジナルのクラスライブラリを使用しているため、PDO部分の書き方が異なる場合があります。
9/1 POSTをGETに書き換えたところ、doneの中身が処理されるようになりました。
しかし、データベースがアップデートされない状態になりました。
ソースコード
var input_Pass = window.prompt("管理パスワードを入力してください。");
if(input_Pass){
$.when(
$.ajax({
url:"../../php/finish_Password.php",
type:"POST",
data:{
input_Pass:input_Pass,
fileName:"<?php echo $fileName; ?>"
}
})
).done(
function(){
window.location.reload();
}
);
}else{
window.alert("キャンセルしました");
}
finish_Password.php
<?php
$mysql = ****************; //mysqlサーバーへのログイン
$fileName = $_POST["fileName"];
$pass_Hash = $mysql-> select(****);
if(password_verify($_POST["input_Pass"], $pass_Hash[0][0])){
$time = new DateTime();
$finishTime = $time->format('Y-m-d H:i:s');
$resp = $mysql-> update(********);
}
?>
9/1更新 パスワード認証
<script type="text/javascript">
function myEnter(){
var input_Pass = window.prompt("管理パスワードを入力してください。");
if (input_Pass) {
$.ajax({
url:"../../php/finish_Password.php",
type:"POST",
data:{
input_Pass:input_Pass,
fileName:"<?php echo $fileName; ?>"
}
})
.done(function (){
window.alert("確認テスト");
})
.fail(function (xhr, status) {console.log(xhr, status);
});
} else {
window.alert("キャンセルしました");
}
}
</script>
9/1更新 finish_Password.php
<?php
$mysql = //mysqlサーバーへのログイン
$fileName = $_POST["fileName"];
$pass_Hash = $mysql-> select("**");
//$input_Pass = $_POST["input_Pass"];
//print_r($pass_Hash);
if(password_verify($_POST["input_Pass"], $pass_Hash[0][0])){
$time = new DateTime();
$finishTime = $time->format('Y-m-d H:i:s');
//アップデートを一時的に止めています。
}
?>
-
気になる質問をクリップする
クリップした質問は、後からいつでもマイページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
クリップを取り消します
-
良い質問の評価を上げる
以下のような質問は評価を上げましょう
- 質問内容が明確
- 自分も答えを知りたい
- 質問者以外のユーザにも役立つ
評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。
質問の評価を上げたことを取り消します
-
評価を下げられる数の上限に達しました
評価を下げることができません
- 1日5回まで評価を下げられます
- 1日に1ユーザに対して2回まで評価を下げられます
質問の評価を下げる
teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。
- プログラミングに関係のない質問
- やってほしいことだけを記載した丸投げの質問
- 問題・課題が含まれていない質問
- 意図的に内容が抹消された質問
- 過去に投稿した質問と同じ内容の質問
- 広告と受け取られるような投稿
評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。
質問の評価を下げたことを取り消します
この機能は開放されていません
評価を下げる条件を満たしてません
質問の評価を下げる機能の利用条件
この機能を利用するためには、以下の事項を行う必要があります。
- 質問回答など一定の行動
-
メールアドレスの認証
メールアドレスの認証
-
質問評価に関するヘルプページの閲覧
質問評価に関するヘルプページの閲覧
+1
ajaxの戻り値を参照せずにwhenの非同期処理だけまって
doneを実行していませんか?拾うべきはajaxのdoneでは?
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
checkベストアンサー
0
PHPのコードの最後でJavaScript側に何も返していないのが原因かと思います。NULL or {}
などを返してみてはいかがでしょうか。
if(password_verify($_POST["input_Pass"], $pass_Hash[0][0])){
$time = new DateTime();
$finishTime = $time->format('Y-m-d H:i:s');
return '{}'; // or return null;
//アップデートを一時的に止めています。
}
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
0
$.when().done()
ではなく、単純に$.ajax().done()
です。
他には、$.ajax().then().done().fail().always()
があります。
var input_Pass = window.prompt("管理パスワードを入力してください。");
if (input_Pass) {
$.ajax({
url:"../../php/finish_Password.php",
type:"POST",
data:{
input_Pass:input_Pass,
fileName:"<?php echo $fileName; ?>"
}
})
.done(function (){
window.location.reload();
});
} else {
window.alert("キャンセルしました");
}
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
15分調べてもわからないことは、teratailで質問しよう!
- ただいまの回答率 88.34%
- 質問をまとめることで、思考を整理して素早く解決
- テンプレート機能で、簡単に質問をまとめられる
質問への追記・修正、ベストアンサー選択の依頼
m.ts10806
2017/08/31 16:25
プログラムコード(およびエラーメッセージ)は```で囲ってください。(わからなければ質問編集画面でコード部分を選択し<code>ボタンを押してください)
m.ts10806
2017/08/31 16:26
$fileNameはどのように設定されるのでしょうか?またphp側も関係するかもしれませんのでfinish_Password.phpのソースコードもあわせてご提示ください(パスワードなど機密情報にあたる部分は****やhogehogeなどで適当にマスクしてください)
m.ts10806
2017/08/31 16:59
fail()で何かエラーが返ってきていないかご確認願います。あとはphpが正しく実行されているかですね。php冒頭でfile_get_contents()とかで適当なテキストファイルを作るとかで確認できます。
Zu_Chan
2017/08/31 17:19
エラーはありませんでした・・・。パスワードの処理の終了後、ページを手動で更新すると終了日時が挿入される状態です。
Zu_Chan
2017/09/01 19:18
すみません、その後、終了ボタンのボタン種別を送信ボタンから通常ボタンに変えたところ、エラーが解決しました。ありがとうございました。
kei344
2017/09/01 19:20
質問文のコードはそれぞれコードブロックで囲んでいただけませんか? ```(バッククオート3つ)で囲み、前後に改行をいれるか、コードを選択して「<code>」ボタンを押すとコードブロックになります。