2012-03-26 65 views
0

我試圖做一個簡單的練習,使用XMLHTTPrequest對象和POST方法從JS查詢數據庫。基本上,我將一個字符串傳遞給PHP服務器,它接收它,查詢數據庫並從JS中讀取信息的位置返回一個XML,但是某些內容不起作用:請求準備就緒後應執行的回調函數。如何正確使用Ajax和PHP從JavaScript查詢數據庫?

這裏的JS代碼:

function leerDNI(dni){ 

var params="dni="+dni; 

downloadUrl(params,"genxml.php", function(data) { 
    var xml = parseXml(data);//THIS IS NOT BEING EXECUTED 
    var dnis = xml.documentElement.getElementsByTagName("dni");//THIS IS NOT BEING EXECUTED 
    for (var i = 0; i < dnis.length; i++) {//THIS IS NOT BEING EXECUTED 
    var name = dnis[i].getAttribute("name"); 
    alert(name); //THIS IS NOT BEING EXECUTED 
    document.getElementById("name").value=name; //THIS IS NOT BEING EXECUTED 
} 
}); 

} 

function downloadUrl(params,url, callback) { 
var request = window.ActiveXObject ? 
new ActiveXObject('Microsoft.XMLHTTP') : 
new XMLHttpRequest; 

request.onreadystatechange = function() { 
if (request.readyState == 4) { 
request.onreadystatechange = doNothing; 
callback(request.responseText, request.status); 

} 
}; 
request.open("POST", url, true); 
request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");//creación de headers 
request.send(params);//enviamos la petición POST 
} 

function parseXml(str) { 
if (window.ActiveXObject) { 
var doc = new ActiveXObject('Microsoft.XMLDOM'); 
doc.loadXML(str); 
return doc; 
} else if (window.DOMParser) { 
return (new DOMParser).parseFromString(str, 'text/xml'); 
} 
} 

function doNothing() {} 

被正確生成的XML。任何人都可以點亮我的代碼中的錯誤?非常感謝你!

回答

0

我已經解決了這個問題,這是這一行:

var dnis = xml.documentElement.getElementsByTagName("dni"); 

這是被替代的:

var dnis = xml.documentElement.getElementsByTagName("persona"); 

因爲我正在生成角色節點。

感謝您的回答!

0

未必是原因,但在downloadUrl(PARAM,URL,回調)功能,回撥電話是:

callback(request.responseText, request.status); 

所以2個參數。

然而,當你調用該函數:

downloadUrl(params,"genxml.php", function(data){...}) 

你給我的回調只有1個參數。檢查一下。

+0

是的,我已檢查刪除request.status參數之前,沒有做出改變。不管怎麼說,還是要謝謝你! – danielrozo 2012-03-27 09:16:09

+0

如果ajax請求成功執行並且瀏覽器接收到數據,您是否使用像firebug這樣的插件進行檢查? – grifos 2012-03-27 14:41:25

0

這一個使用後,準備去和改變您的需求!

HTML文件(文件名並不重要)

<html> 
<head> 
<script type="text/javascript"> 

var request = false; 
try { 
    request = new XMLHttpRequest(); 
} catch (trymicrosoft) {       
    try { 
    request = new ActiveXObject("Msxml2.XMLHTTP"); 
    } catch (othermicrosoft) { 
    try { 
     request = new ActiveXObject("Microsoft.XMLHTTP"); 
    } catch (failed) {     
     request = false;  
    } 
    } 
} 

if (!request) 
    alert("Error initializing XMLHttpRequest!"); 
</script> 

<script type="text/javascript"> 

var fileOption; 


    function runPhp(Args) 
    { 
     var url = "script.php"; 
     fileOption = Args; 
     var params = "Args=" +Args+""; 
     request.open("POST", url, true); 

     //Some http headers must be set along with any POST request. 
     request.setRequestHeader("Content-type", "application/x-www-form-urlencoded;charset=utf-8"); 
     request.setRequestHeader("Content-length", params.length); 
     request.setRequestHeader("Connection", "close"); 

     request.onreadystatechange = updatePage; 
     request.send(params); 

    }//////////////////// 

    function getXml() 
    { 
     var url = 'temp.xml'; 
     var params = null; 
     request.open("POST", url, true);  
     request.setRequestHeader("Connection", "close");  
     request.onreadystatechange = displayFile; 
     request.send(params); 
    }//////////////////// 

    //You're looking for a status code of 200 which simply means okay. 
    function updatePage() { 
    if (request.readyState == 4) { 
     if (request.status == 200) 
     { 

      if(fileOption==1) 
       {fileName=request.responseText; return;} 
      document.getElementById('divResults').innerHTML=request.responseText; 
      document.getElementById('textareaResults').innerHTML=request.responseText; 
     } 
     else{ 
     //alert("status is " + request.status); 
     } 
    } 
    } 

     function displayFile() { 
    if (request.readyState == 4) { 
     if (request.status == 200) 
     { 
      document.getElementById('textareaResults').innerHTML=request.responseText; 
      document.getElementById('divResults').innerHTML='File loaded in text area above.'; 
     } 
     else{ 
     //alert("status is " + request.status); 
     } 
    } 
    } 

</script> 
</head> 
<body > 


<span style="background-color:blue;color:yellow;" 
onClick="runPhp('GetFromMysql')"/> 
Click this to get data from MySql.<br> 
</span><br><br> 

<span style="background-color:blue;color:yellow;" 
onClick="runPhp('MysqlToFile')"/> 
Click this to get data from MySql and store them in a file instead of displaying.<br> <br> <br> 
</span> 

<span style="background-color:blue;color:yellow;" 
onClick="getXml()"/> 
Click to read the xml file.<br> 
</span> 

<textarea rows="10" cols="88" id="textareaResults"> 
</textarea> 
<br><br> 
<pre><div id="divResults"></div></pre> 
<br><br> 




</body> 
</html> 

,這是script.php的

<?PHP 

    $xml_output = routine(); 
    if($_POST['Args']==='GetFromMysql') 
     echo $xml_output .= "</records>"; 

    elseif($_POST['Args']==='MysqlToFile') 
    { 
     $fileName = 'temp.xml'; 
     $fp = fopen($fileName, 'w'); 
     fwrite($fp, $xml_output); 
     fclose($fp); 
     echo "temp.xml";//return the file name 
    } 

    function routine() 
    { 
     mysql_connect('localhost', 'root',''); 
     mysql_select_db("mysql"); 
     $query="select * from help_category;"; 
     $resultID = mysql_query($query) or die("Data not found."); 
     $xml_output = "<?xml version=\"1.0\"?>\n"; 
     $xml_output .= "<records>\n"; 

     for($x = 0 ; $x < mysql_num_rows($resultID) ; $x++) 
     { 
      $row = mysql_fetch_assoc($resultID); 
      $xml_output .= "\t<record>\n"; 
      $xml_output .= "\t\t<help_category_id>" . $row['help_category_id'] . "</help_category_id>\n"; 
      $xml_output .= "\t\t<name>" . $row['name'] . "</name>\n"; 
      $xml_output .= "\t\t<parent_category_id>" . $row['parent_category_id'] . "</parent_category_id>\n"; 
      $xml_output .= "\t</record>\n"; 
     } 
     return $xml_output; 
    } 

?> 
相關問題