2010-11-13 238 views
0

我的JavaScript代码应该使用AJAX接收数据并将其显示在名为“txtHint”的DIV中。然而,这是我得到的错误,当代码执行(我用的是内置的Safari中调试器):JavaScript无法识别HTML中的元素

TypeError: Result of expression 'document.getElementById("txtHint")' [null] is not an object.

下面是代码:

function showItem(str) 
{ 
if (str=="") 
    { 
    document.getElementById("txtHint").innerHTML=""; 
    return; 
    } 
if (window.XMLHttpRequest) 
    {// code for IE7+, Firefox, Chrome, Opera, Safari 
    xmlhttp=new XMLHttpRequest(); 
    } 
else 
    {// code for IE6, IE5 
    xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); 
    } 
xmlhttp.onreadystatechange=function() 
    { 
    if (xmlhttp.readyState==4 && xmlhttp.status==200) 
    { 
    document.getElementById("txtHint").innerHTML=xmlhttp.responseText; 
    } 
    } 
xmlhttp.open("GET","getitem.php?q="+str,true); 
xmlhttp.send(); 
} 

现在我得到: 类型错误:表达式'el'[undefined]的结果不是一个对象。

这是否表示我的元素不存在?

+2

请发布您的标记。 – jwueller 2010-11-13 00:57:51

+1

你在DOM完成加载后运行这个吗?如果不是,你正在尝试获取“txtHint”,然后getElementById(“txtHint”)将返回null。这可能适用于ajax请求中的回调,因为它是异步的,但是如果str ==“”,它会立即发生 – 2010-11-13 01:01:38

+0

如何查看DOM是否未完成,并且我的div尚未“注册”? – Parker 2010-11-13 01:08:43

回答

2

首先,检查元素是否存在。

var el = document.getElementById('txtHint'); 
if (el) { 
    el.innerHTML = xmlhttp.responseText; 
} 

请确保您在DOM中生成元素后进行绑定。您也可以通过window.onload = showItem等待整个窗口加载。

人们使用像jQuery这样的框架来节省时间。您的代码会导致一些简洁的内容:

$(function() { 
    function blah(str) { 
     if (str == '') { 
     $('#txtHint').html('') 
     return; 
     } 

     $.ajax({ url:'blah.php', success:function(html) { 
     $('#txtHint').html(html); 
     } }) 
    } 
});