我有一个运输区域数据库,我想使用 PHP 通过 AJAX 请求访问该数据库。
PHP 未正确生成responseXML 的XML。如果我将 url 更改为 .xml
文件,则脚本可以正常工作。
这是我的 PHP 生成 XML `
<?
libxml_use_internal_errors(true);
$country_id = intval($_GET['country']);
$country_id = 74;
$con = mysqli_connect("localhost", "tradingb_data", "[s;_m@NN2;)F", 'tradingb_tradingbloc');
if (!$con) {
die('Could not connect: ' . mysqli_error($con));
}
mysqli_select_db($con,"ajax_demo");
$sql="SELECT * FROM `shipping_zones` WHERE zone_type = 'Province' and parent_zone = '$country_id' ORDER BY zone";
$result = mysqli_query($con,$sql);
echo "<?xml version=\"1.0\" ?> <shipping_zones>";
while($row = mysqli_fetch_array($result)) {
$row_id = $row['id'];
$row_zone = $row['zone'];
echo "<province> <zoneid>$row_id</zoneid><zone>$row_zone</zone></province>";
}
echo "</shipping_zones>";
mysqli_close($con);
?>
`
这是我的 JavaScript `
function changeCountry(){
var e = document.getElementById(\"country_id\");
var country_id = e.options[e.selectedIndex].value;
if(country_id == 1){
// Display states
document.getElementById('display_province').style.display = \"none\";
document.getElementById('display_state').style.display = \"\";
document.getElementById('display_state').style.visibility = \"visible\";
}
else{
// Display Province
document.getElementById('display_state').style.display = \"none\";
document.getElementById('display_province').style.display = \"\";
document.getElementById('display_province').style.visibility = \"visible\";
// Remove current selection list
// Get Provinces for country_id
var xmlhttp = new XMLHttpRequest();
// Include fix for IE6 and IE5
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) {
var xmlDoc = xmlhttp.responseXML;
// get each property
// Last known execution
var x=xmlDoc.getElementsByTagName(\"province\");
for (i=0;i<x.length;i++)
{
var e = document.getElementById(\"province_id\");
var opt = document.createElement('option');
opt.value = x[i].getElementsByTagName('zoneid')[0];
opt.innerHTML = x[i].getElementsByTagName('zone')[0];
e.appendChild(opt);
}
}
}
xmlhttp.open(\"GET\",\"get_provinces.php?country_id=\"+country_id,true);
xmlhttp.setRequestHeader(\"Content-type\", \"text/xml\");
xmlhttp.send();
}
}
`
我知道我的错误在于 PHP 为 AJAX 请求生成的内容。
最佳答案
xmlhttp.onreadystatechange = function() {
if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
var xmlDoc = xmlhttp.responseXML;
// get each property
// Last known execution
var x = xmlDoc.getElementsByTagName('province');
for (i = 0; i < x.length; i++) {
var e = document.getElementById('province_id');
var opt = document.createElement('option');
opt.value = x[i].getElementsByTagName('zoneid')[0].textContent;
opt.innerHTML = x[i].getElementsByTagName('zone')[0].textContent;
e.appendChild(opt);
}
}
}
我做了一个plunker并测试了它。
将\"替换为 ' 并使用 .textContent
http://plnkr.co/edit/fddv9rYpCcbz4zt1D9Sb?p=preview
(抱歉之前误导了您)
关于javascript - 无法从 PHP 读取 Javascript responseXML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28529724/