javascript - 无法从 PHP 读取 Javascript responseXML

标签 javascript php ajax xml

我有一个运输区域数据库,我想使用 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/

相关文章:

javascript - 在 JS 中序列化输入,在 php 中返回字符串

javascript - 在 iOS/android 上触发触摸标注

javascript - 使用 jQuery 构建可自定义的起始页

javascript - Bluebird 中 Promise 链数组的串行执行

javascript - 允许编辑文本动态 php 表

javascript - 是否使用复选框

javascript - 从 Java android 调用 AngularJs Controller 函数

php - Symfony2 Assetic 和 Less Sourcemaps

javascript - HTML 保护密码字段

php - 单击提交按钮时,使用 jquery/AJAX 提交表单不起作用