3

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);
}

?>
4

1 に答える 1

0

DOM の準備ができていないと思います。コード呼び出しを window.onload に追加するか、JQuery を使用している場合は $(document).ready に追加してみてください。

于 2013-09-20T10:03:01.953 に答える