2016-07-26 57 views
2

我正在做一个Ajax的jQuery函数如下:遗漏的类型错误:无法读取空的特性“documentElement”,AJAX

$('.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); 
     } 
    } 
} 

所以被点击我的按钮{类=变化}时,它会要发送ID来beforeUpdate.php,并在此PHP文件我生成将被送回xhr1.onreadystatechange = handleResponse;这是我beforeUpdate.php文件的XML文件:

<?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的

+0

xhr1.responseText给你什么? – 2016-07-26 14:53:37

+0

Oooowh ... yeaat ..我从responseText找到了一些东西...给我一下Squint先生... –

+0

其实responseText包含了我的xml响应......这里发生了什么......? :v –

回答

1

我解决它通过更改后的方法获取方法,而是使用这些行:

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

谢谢所有.. :)

+0

这没有什么意义。如果原始错误消息告诉你在尝试获取'.documentElement'时'xmlResponse'为'null',那么在访问'.getElementsByTagName()'时应该会得到相同的错误消息,除非你改变了别的东西。 – 2016-07-26 17:12:22

+0

我已经编辑了我的回答Mr. Squint .. :) –

+0

啊,这样做更有意义。 :) – 2016-07-26 18:35:25

相关问题