firefox では動作するが、chrome や IE では動作しないスクリプト (javascript) があります。問題を見つけるためにクロムデバッグコンソールを開きました。エラーは報告されず、コードは完全に機能します。コンソールを閉じた状態で再度実行しても機能しません。
スクリプトのバージョンが正しい (古くてキャッシュされていない) ことを確認しました。コンソールは警告やエラーを報告しません。
ページの下部にある div に書き込む単純なログを入れてみました - 情報はありません。(デバッグコンソールでは機能します-divのログ情報を含みます)。
この関数は、XMLHttpRequest がサーバーに対して行われた後のコールバックです。
error_log 呼び出しを含めることで、php スクリプトが呼び出されることを確認しました。error_log は戻り値を正しく示しています。ページを更新すると、行が削除されたことも示されます。
コンソールが開いていない限り、関数 removeRow() が呼び出されないように見えます。(メソッドまたは予約語の競合??) 関数名を delRow (コールバックを含む) に変更しようとしましたが、まだ機能していません。
他のすべての Ajax 呼び出しは正常に機能しているようです。
コード スニペットは次のとおりです。
var pos = 0;
var xhr;
function eraseRow() {
var myImage = this;
var fullid = myImage.id;
// split row no and record id eg 5_1223 => row=5 and recordid=1223
var idComponents = fullid.split("_");
if (idComponents.length > 1) { // check if image has complete row info
rowid = idComponents[1]; // extract row number from id
pos = parseInt(idComponents[0]);
xhr = new XMLHttpRequest(); // only support IE8 or +
xhr.onreadystatechange = removeRow;
xhr.open("GET","valid_del.php$delrow="+rowid;
xhr.send(null);
}
}
function removeRow() {
if (xhr.readyState == 4) {
if (xhr.status == 200) {
var err = document.getElementById("errormsg");
var str = xhr.responseText;
err.innerHTML = "Server returned "+str;
if (str === "go-ahead") {
var table = document.getElementById("tableid");
table.deleteRow(pos);
}
}
}
}
PHP (valid_del.php):
<?php
include(funclib.php);
if (isset($_GET['delrow']) && strlen($_GET['delrow'] > 0) {
$recid = $_GET['delrow'];
$db = createDbConn(); // function that connects to mysql server db
$result = $db->query("delete from doclibrary where doc_id='$recid'");
if ($result===true) {
echo 'go-ahead';
error_log('Script successful - returns go-ahead',0);
} else {
echo 'stop';
error_log('Script not successful - returns stop',0);
}
$db->close();
} else {
echo 'stop';
error_log('Script not given record id - returns stop',0);
}
?>