3

我有一个脚本(javascript)可以在 Firefox 中运行,但不能在 chrome 或 IE 中运行。我打开 chromes 调试控制台来查找问题。没有错误报告,代码完美运行。在控制台关闭的情况下再次运行它不再起作用。

我验证了脚本的版本是正确的(不是旧的和缓存的)。控制台不报告任何警告或错误。

我尝试将简单的日志记录写入页面底部的 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 回答