【问题标题】:Uncaught TypeError: Cannot read property 'documentElement' of null, AjAX未捕获的类型错误:无法读取 null、AjAX 的属性“documentElement”
【发布时间】:2016-11-30 06:36:30
【问题描述】:

我正在制作这样的 ajax-jquery 函数:

$('.change').live('click',function(){
     $('html, body').animate({
        scrollTop: $("h4").offset().top
      }, 2000);

     $('h4').text("Edit Your Video Here :");
     $('.drop').text("Drop Your Updated Video Here...");
     $('.btn').text("Update");

     var videoID = this.id;
     xhr1 = new XMLHttpRequest();

        //initiate request
     xhr1.open('post','beforeUpdate.php',true);//true for asynchronous
     xhr1.setRequestHeader('Content-Type',"multipart/form-data");
     xhr1.setRequestHeader('vidID',videoID);
     xhr1.onreadystatechange = handleResponse;
    xhr1.send(null);     

});

function handleResponse()
{
    if(xhr1.readyState==4)//processing done
     {
        if(xhr1.status == 200)//response okie
        {
            var xmlResponse = xhr1.responseXML;
            root= xmlResponse.documentElement;
            var id = root.getElementsByTagName("ID");
            var name = root.getElementsByTagName("Nama");

            console.log("ID From Server : "+id);
            console.log("Name From Server : "+name);
        }
     }
}

所以当我的按钮{class=change}被点击时,它会发送一个 ID 到 beforeUpdate.php,在这个 php 文件中我生成一个 XML 文件将被发送回xhr1.onreadystatechange = handleResponse;这是我的 beforeUpdate。 php文件:

<?php
require 'databaseConnection.php';
openConnection();   

$headers = apache_request_headers();
$ID = $headers['vidID'];

$hasil = mysql_query("SELECT * FROM video_management where id=$ID");
$result = mysql_fetch_array($hasil);

//$test = "ID = ".$ID."\r\n"."Name = ".$result['Nama'];

//fwrite($myfile, $test);
//fclose($myfile);

//Generating XML FILE
header('Content-Type: text/xml');
echo '<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>';
echo '<response>';
    echo '<ID>';
        echo $ID;
    echo '</ID>';
    echo '<Name>';
        echo $result['Nama'];
    echo '</Name>';
    echo '<Type>';
        echo $result['Type'];
    echo '</Type>';
    echo '<Path>';
        echo $result['videoPath'];
    echo '</Path>';
echo '</response>';
closeConnection();
?>

从数据库中获取数据没有问题,我可以获取所有数据并将它们放入关联的xml元素中。

那么问题来自root= xmlResponse.documentElement;据说Uncaught TypeError: Cannot read property 'documentElement' of null,所以我在这里做错了什么......? 太感谢了...! :)

注意: 我的浏览器是chrome

【问题讨论】:

  • xhr1.responseText 带给你什么?
  • 哇哦……是啊……我从 responseText 中找到了一些东西……给我片刻,Squint 先生……
  • 实际上 responseText 包含我的 xml 响应...这是怎么回事... ?? :v
  • 通常你会在打开连接之前拥有 readystatechange 处理程序
  • 我已经这样做了,但它返回一个 [object HTMLCollection] 所以 console.log 看起来像这个 ID From Server : [object HTMLCollection] 和 Name From Server : [object HTMLCollection]

标签: javascript php jquery ajax


【解决方案1】:

我通过将 post 方法更改为 get 方法而不是使用这些行来解决它:

if(xhr1.status == 200)//response okie
        {
            var xmlResponse = xhr1.responseXML;
            root= xmlResponse.documentElement;
            var id = root.getElementsByTagName("ID");
            var name = root.getElementsByTagName("Nama");

            console.log("ID From Server : "+id);
            console.log("Name From Server : "+name);
        }

我改成

if(xhr1.status == 200)//response okie
        {
            var xmlResponse = xhr1.responseXML;
            var textResponse = xhr1.responseText;
            console.log("textResponse : "+textResponse);

            //root= xmlResponse.documentElement;
            var id = xmlResponse.getElementsByTagName("ID");
            var name = xmlResponse.getElementsByTagName("Name");

            console.log("ID From Server : "+id[0].childNodes[0].nodeValue);
            console.log("Name From Server : "+name[0].childNodes[0].nodeValue);
        }

参考: http://www.w3schools.com/ajax/ajax_xmlhttprequest_response.asp

谢谢大家.. :)

【讨论】:

  • 这没有任何意义。如果在尝试获取 .documentElement 时原始错误消息告诉您 xmlResponsenull,那么您在访问 .getElementsByTagName() 时应该会收到相同的错误消息,除非您更改了其他内容。
  • 啊,这更有意义。 :)
猜你喜欢
  • 2015-02-13
  • 2021-08-31
  • 2016-05-08
  • 1970-01-01
  • 2015-06-18
  • 2021-11-18
  • 1970-01-01
  • 2022-01-19
  • 2021-12-01
相关资源
最近更新 更多