Javascript getElementById中断脚本

Javascript getElementById中断脚本,javascript,ajax,Javascript,Ajax,我正在做一个小项目,但我被卡住了,不知道自己做错了什么。 我使用Ajax调用更新MYSQL行的php脚本 javascript: function savecust() { if (window.XMLHttpRequest) { xmlhttp=new XMLHttpRequest(); } else { xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); } xmlhttp.onreadystatecha

我正在做一个小项目,但我被卡住了,不知道自己做错了什么。
我使用Ajax调用更新MYSQL行的php脚本

javascript:

function savecust()
{
if (window.XMLHttpRequest)
  {
  xmlhttp=new XMLHttpRequest();
  }
else
  {
  xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
  }
xmlhttp.onreadystatechange=function()
  {
  if (xmlhttp.readyState==4 && xmlhttp.status==200)
    {
    document.getElementById("custdetails").innerHTML=xmlhttp.responseText;
    }
  }
xmlhttp.open("GET","./ajax/savecust.php?id=" + document.getElementById('id').value,true); //More arguments should still be passed.
xmlhttp.send();
}
如果我删除
document.getElementById('id').value
,脚本将正常工作并执行应该执行的操作。(显然,我从PHP那里得到了回应

我将脚本与其他脚本一起加载到页面头部:

<script src="js/custedit.js" type="text/javascript"></script>

这是我如何称呼脚本的:

<input type='button' onclick='savecust()' value='Save' />

任何帮助都将不胜感激;-)

谢谢

编辑
  • 内容应该放在的div存在
  • PHP脚本现在返回一个错误(因为它没有获得所有必需的参数)
  • 内容(以及id为“id”的文本字段)由另一个脚本加载。这是个问题吗?如果您在浏览器中查看源代码,则文本字段不存在。但是,它们在浏览器中可见
编辑2 所以,我在我的脚本上运行了这个测试:

var thisid = 'id';//should get info from <input type='text' name='id' />
var T = document.getElementById(thisid);
if (T) {
     alert("element exists" + T.value);
} else {
alert("nothing to be found");
}
var thisid='id'//应该从
var T=document.getElementById(thiId);
if(T){
警报(“元素存在”+T.值);
}否则{
警报(“未发现任何东西”);
}
它确实找不到元素。这为我指明了正确的方向。
由另一个Ajax脚本插入。所以我认为第二个脚本找不到它


如何解决这个问题?

最明显的原因是没有id为
id
的字段,或者在脚本运行时HTML尚未完全加载


您应该检查浏览器的脚本错误(在Firefox上使用Firebug或在Internet Explorer上按F12)

最明显的原因是没有id为
id
的字段,或者脚本运行时HTML没有完全加载


您应该检查浏览器的脚本错误(在Firefox中使用Firebug或在Internet Explorer上按F12)

如果元素属性不存在,则无法访问该属性

也许是一个测试:

var thisid = 'id';//whatever it REALLY is...
    var T = document.getElementById(thisid);
    if (T) {
         alert("element exists" + T.value);
    }

如果元素属性不存在,则无法访问该属性

也许是一个测试:

var thisid = 'id';//whatever it REALLY is...
    var T = document.getElementById(thisid);
    if (T) {
         alert("element exists" + T.value);
    }

这与PHP无关。您是否尝试过向document.getElementById('id').value发出警报??当它失败时,它会做什么?你收到错误信息了吗?Javascript失败了还是PHP失败了?为什么不使用jQuery(或类似的工具)来简化这个过程呢?您可能缺少id=“id”的元素。如果找不到元素,则document.getElementById('id')将返回null。document.getElementById('id')。值​​如果找不到元素,将显示此错误:“TypeError:无法读取null的属性'value'”这与PHP无关。您是否尝试过向document.getElementById('id').value发出警报??当它失败时,它会做什么?你收到错误信息了吗?Javascript失败了还是PHP失败了?为什么不使用jQuery(或类似的工具)来简化这个过程呢?您可能缺少id=“id”的元素。如果找不到元素,则document.getElementById('id')将返回null。document.getElementById('id')。值​​如果找不到元素,将显示此错误:“TypeError:无法读取null的属性'value'”脚本找不到元素。请参见顶部的“编辑”。我该如何解决这个问题呢?我想你需要做的是让第二个(插入器)脚本调用第一个脚本中的函数来完成你需要的工作。注意:你在这里(根据注释等证据)假设name=“id”与id=“id”-如果可能,用实际id=“id”进行测试。我认为(没有引用)name==id假设是不推荐使用的功能。另一个注意:原因是在IE中,getElementById在到达输入元素之前查找并返回name属性具有值描述的元元素-尝试将“id”更改为“idme”或者是与属性不同的唯一属性。(并尝试添加一个实际的id='idme'),如果失败的话。最后一个想法是:name=对表单元素内容有效,但是如果注入元素,我不确定name=和id=转换将如何处理,如果有,那么为什么id=可能是一个好的测试/修复?在这个例子中。如果它不在表单中,很可能根本就没有这样做。脚本找不到元素。请参见顶部的“编辑”。我该如何解决这个问题呢?我想你需要做的是让第二个(插入器)脚本调用第一个脚本中的函数来完成你需要的工作。注意:你在这里(根据注释等证据)假设name=“id”与id=“id”-如果可能,用实际id=“id”进行测试。我认为(没有引用)name==id假设是不推荐使用的功能。另一个注意:原因是在IE中,getElementById在到达输入元素之前查找并返回name属性具有值描述的元元素-尝试将“id”更改为“idme”或者是与属性不同的唯一属性。(并尝试添加一个实际的id='idme'),如果失败的话。最后一个想法是:name=对表单元素内容有效,但是如果注入元素,我不确定name=和id=转换将如何处理,如果有,那么为什么id=可能是一个好的测试/修复?在这个例子中。如果它不是以某种形式出现,很可能它根本就没有这样做。