2016-07-26 77 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

相關問題