前提・実現したいこと
AjaxでPHPファイルへPOST送信してDBを更新させて、再描画処理をしているのですが、
FireFoxでのみ動作しません。(Edge/Chromeは動作してます。)
なぜなのかググってみたのですが、HTML5より前ならmetaタグの記述漏れだったりとありますが、
今回はHTML5ですので、別の原因と思ってます。
恐れ入りますが、お力添えをお願いします。
※xmlHttpRequestはundefinedで返ってきております。
追記①:
成功するEdge/Chromeについては、「成功」のAlertが表示され、DBの更新もできます。
失敗するFirefoxについては、「失敗」のAlertが表示され、DBの更新もできていません。
追記②:
Firefoxでデバッグしてみて少し挙動が異なることがわかりました。
デバッグでブレイクポイントをajax通信前に置いて一旦停止させるとajax通信が成功することが判明しました。
ブレイクポイントを置かず(停止させずに)実行するとajax通信失敗になることがわかりました。
※原因が分かっておりません。
うまくいく場合 (Edge / Chrome) とダメな場合 (Firefox) を比較しました。
成功:
失敗:
該当のソースコード
※呼び出し元のPHP
PHP
1<?php 2 session_start(); 3 ini_set('default_charset', 'UTF-8'); 4?> 5<!DOCTYPE html> 6<html lang="ja"> 7<head> 8 <meta charset="UTF-8"> 9 <meta NAME="ROBOTS" CONTENT="NOINDEX, NOFOLLOW"> 10 <title>更新処理</title> 11 <link href="css/screen.css" rel="stylesheet"> 12 <link href="http://code.jquery.com/ui/1.9.2/themes/base/jquery-ui.css" rel="stylesheet"/> 13 <link href="css/web-style-support.css" rel="stylesheet"> 14 <script src="js/admin.js"></script> 15 <script src="http://code.jquery.com/jquery-1.8.3.js"></script> 16 <script src="http://code.jquery.com/ui/1.9.2/jquery-ui.js"></script> 17</head> 18<body> 19 <table width="1240px" align="left"> 20 <tr> 21 <td> 22 <h3>更新処理テスト</h3> 23 </td> 24 </tr> 25 </table> 26 <table class="list_table" style="margin-top:0px"> 27 <input id="btn_update" type="button" value="DB更新" /> 28 </table> 29</body> 30</html> 31
※Ajax通信処理
Js
1$('#btn_update').on('click', function() { 2 $.ajax({ 3 type: 'POST', 4 url: './update_db.php', 5 data: { }, 6 dataType: 'json', 7 timeout: 5000, 8 }) 9 .done( 10 // 通信成功時 11 function (data) { 12 if (0 < data.cnt) { 13 alert('成功'); 14 } 15 }).fail( 16 function (XMLHttpRequest, textStatus, errorThrown) { 17 alert('失敗'); 18 }); 19 }
※POST送信を受け取るPHP
PHP
1<?php 2 session_start(); 3 4 $dsn = 'mysql:host=localhost;dbname=XXXXX;charset=utf8'; 5 $pass = 'XXXXXXXXXX'; 6 $user = 'XXXXX'; 7 8 $err = ''; 9 try { 10 $dbh = new PDO($dsn, $user, $pass, array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION)); 11 12 $sql = "UPDATE test_table SET update_date = now()"; 13 14 $prepare = $dbh->prepare($sql); 15 16 // プリペアードステートメント実行 17 $prepare->execute(); 18 19 $res = $prepare->rowCount(); 20 21 } catch (PDOException $e) { 22 $msg = $e->getMessage(); 23 // エラー 24 $err = $msg; 25 } 26 echo json_encode(['cnt' => $res, 'err' => $err]); 27?>
補足情報(FW/ツールのバージョンなど)
Linux
PHP 7.3
FireFox 89.0
Edge 91.0.864.41
Chrome 91.0.4472.101
回答2件
あなたの回答
tips
プレビュー