$.ajax/PHP/MySQL データベースの挿入に関するエラーの原因を追跡するのは非常に困難です。
jQuery側は次のとおりです。
function SaveNewBranch(newBranchName, dataString) {
console.log('In function SaveNewBranch(newBranchName, dataString). Value of
newBranchName: ' + newBranchName + '. Value of dataString: ' +
dataString + '.');
$.ajax({
type: 'POST',
url: '../scripts/branchAdmin.php',
data: dataString,
dataType: 'json',
success: function(newBranchID) {
console.log('from server: ' . newBranchID);
// Clear the page
ClearPageForNewSelection();
PopulateBranchDropdown(newBranchID);
},
error: function(xhr, status, error) {
console.log('datastring: ' + dataString);
alert('An error occurred while attempting to save the branch to the
database. jqXHR object: ' + xhr + '. Status: ' + status + '. Error
message: ' + error + '. An error log with more details has been
created on the server. If the error persists, contact your site
administrator.');
}
});
} // End Save New Branch
PHPコードは次のとおりです。
if(isset($_POST['newBranchName']) &&
isset($_POST['newBranchAddr1']) &&
isset($_POST['newBranchAddr2']) &&
isset($_POST['newBranchCity']) &&
isset($_POST['newBranchState']) &&
isset($_POST['newBranchZip']) &&
isset($_POST['newBranchPhone']) &&
isset($_POST['newBranchFax']) &&
isset($_POST['newBranchUrl'])) {
require_once('dbConnect.php');
$log->lwrite('name: ' . mysqli_real_escape_string($dbc,$_POST['newBranchName']) .
', addr1: ' . mysqli_real_escape_string($dbc,$_POST['newBranchAddr1']) . ',
addr2: ' . mysqli_real_escape_string($dbc,$_POST['newBranchAddr2']) . ',
city: ' . mysqli_real_escape_string($dbc,$_POST['newBranchCity']) . ',
state: ' .$_POST['newBranchState'] . ', zip: ' .
mysqli_real_escape_string($dbc,$_POST['newBranchZip']) . ', phone: ' .
mysqli_real_escape_string($dbc,$_POST['newBranchPhone']) . ', fax: ' .
mysqli_real_escape_string($dbc,$_POST['newBranchFax']) . ', url: ' .
mysqli_real_escape_string($dbc,$_POST['newBranchUrl']));
$_POST['newBranchState'] == '0' ? $newBranchState = '' : $newBranchState =
strtoupper(mysqli_real_escape_string($dbc,$_POST['newBranchState']));
$queryInsertNewBranch = "INSERT INTO branches (name, address1, address2, city,
state, zipCode, phone, fax, url) VALUES ('" .
mysqli_real_escape_string($dbc,$_POST['newBranchName']) . "', '" .
mysqli_real_escape_string($dbc,$_POST['newBranchAddr1']) . "', '" .
mysqli_real_escape_string($dbc,$_POST['newBranchAddr2']) . "', '" .
mysqli_real_escape_string($dbc,$_POST['newBranchCity']) . "', '" .
newBranchState . "', '" .
mysqli_real_escape_string($dbc,$_POST['newBranchZip']) .
"', '" . mysqli_real_escape_string($dbc,$_POST['newBranchPhone']) . "', '" .
mysqli_real_escape_string($dbc,$_POST['newBranchFax']) . "', '" .
mysqli_real_escape_string($dbc,$_POST['newBranchUrl']) . "')";
$log->lwrite('new branch insert: ' . $queryInsertNewBranch);
$resultInsertNewBranch = @mysqli_query($dbc, $queryInsertNewBranch);
...
「dataString」のコンソール出力を介して、適切なデータが php スクリプトに渡されることを確認しました。
テスト挿入のコンソールへの出力:
newBranchName: A Test Branch, datastring: newBranchName=A Test branch&
newBranchAddr1=123 StateSt.&newBranchAddr2=#123&
newBranchCity=Anywhere&newBranchState=MN&newBranchZip=12343&
newBranchPhone=555-555-1212&newBranchFax=555-555-2121&newBranchUrl=minnesota
また、php スクリプトの最初の $log->lwrite 行をチェックして、php スクリプトが適切なデータを取得していることを確認しました。
同じ挿入テストのログへの出力:
new branch insert: INSERT INTO branches (name, address1, address2, city, state,
zipCode, phone, fax, url) VALUES ('A Test Branch', '123 State St.', '#123',
'Anywhere', 'MN', '12343', '555-555-1212', '555-555-2121', 'minnesota')
最後の $log->lwrite エントリ (新しいブランチの挿入) はログ ファイルに書き込まれません。
また、jQuery 側でエラー関数が起動され、アラート ボックスが表示されます。そこにある 3 つのオブジェクトの値は次のとおりです。
jqXHR object: [object Object]
Status: parsererror
Message: Unexpected token e
データを取得するフォームに何を入力しても、常に同じ結果が得られます。INSERT は実行されず、エラー関数の警告ボックスが表示され、毎回同じメッセージが表示されます。
私はコードのあらゆる詳細を何度も何度も調べ、間違ったスペースや二重引用符があるはずの単一引用符などを探しました。
jqXHR オブジェクトが手がかりを保持している可能性がある場合、その要素を取得する方法がわかりません。どうやってそれをしますか?
私(および私のクライアント)は、これを理解するために私が得ることができるどんな助けにも非常に感謝しています!
助けてくれてありがとう...