本节将介绍一个简单的PHP、Ajax和XML三者交互的例子,实现一个XML数据查询和显示系统。

思路:1. 在test.html里准备一个查询按钮(触发回调函数loadXML)和一个显示标签(div.result),通过loadXML()函数向test.php服务器发送请求。2. loadXML()函数主要内容是:创建XMLHttpRequest对象,配置为GET请求,通过send()方法发送请求,在请求成功时解析XML数据并填充div.result的标签内容。3. test.php处理请求,读取dotcpp.xml文件,返回XML数据。


1. 先准备一个dotcpp.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<dotcpp>
    <brand>Dotcpp编程</brand>
    <website>dotcpp.com</website>
    <course>PHP教程</course>
    <courses>
        <course id="1">PHP基础</course>
        <course id="2">PHP高级</course>
        <course id="3">PHP框架</course>
    </courses>
</dotcpp>


2. test.html

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>PHP Ajax XML 交互示例</title>
</head>
<body>
    <h2>Dotcpp XML数据查询系统</h2>
     
    <button onclick="loadXML()">加载XML数据</button>
     
    <div id="result" style="width: 700px; display:flex;">
        
    </div>
    
    <script>
    function loadXML() {
        // 1. 创建XMLHttpRequest对象
        let xhr = new XMLHttpRequest();
         
        // 2. 配置请求
        xhr.open("GET", "test.php", true);
         
        // 3. 定义响应处理函数
        xhr.onreadystatechange = function() {
            /*readystate==4&&status==200表示一个http请求已经成功完成!*/
            if (xhr.readyState == 4 && xhr.status == 200) {
                // 解析XML数据
                parseXML(xhr.responseXML);
            }
        };
         
        // 4. 发送请求
        xhr.send();
    }
    
    function parseXML(xml) {
        if (!xml) {
            document.getElementById("result").innerHTML = "无法解析XML数据";
            return;
        }
        
        // 获取XML根元素
        let dotcpp = xml.getElementsByTagName("dotcpp")[0];
        
        // 提取数据
        let brand = dotcpp.getElementsByTagName("brand")[0].childNodes[0].nodeValue;
        let website = dotcpp.getElementsByTagName("website")[0].childNodes[0].nodeValue;
        let course = dotcpp.getElementsByTagName("course")[0].childNodes[0].nodeValue;
        
        // 获取课程列表
        let courses = dotcpp.getElementsByTagName("courses")[0];
        let courseList = courses.getElementsByTagName("course");
        
        // 构建显示内容
        let html = "";
        html += "<table border='1' cellpadding='5' cellspacing='0'>";
        html += "<tr><th>字段</th><th>值</th></tr>";
        html += "<tr><td>品牌</td><td>" + brand + "</td></tr>";
        html += "<tr><td>网站</td><td>" + website + "</td></tr>";
        html += "<tr><td>主课程</td><td>" + course + "</td></tr>";
        html += "</table>";
        
        html += "<ul>";
        for (let i = 0; i < courseList.length; i++) {
            let courseId = courseList[i].getAttribute("id");
            let courseName = courseList[i].childNodes[0].nodeValue;
            html += "<li>ID: " + courseId + " - " + courseName + "</li>";
        }
        html += "</ul>";
        
        // 更新页面显示结果
        document.getElementById("result").innerHTML = html;
    }
    </script>
</body>
</html>


3. test.php

<?php
// 设置响应头,指定返回的是XML格式
header('Content-Type: text/xml; charset=utf-8');
// XML文件路径
$xmlFile =__DIR__. '/dotcpp.xml';
    // 读取dotcpp.xml
    readfile($xmlFile);
?>


4. 效果演示:

4.1 进入test.html页面:

PHP Ajax和XML

4.2 点击“加载XML数据”按钮,我们可以看到XML数据:

PHP Ajax和XML


总结:本节通过一个完整的Dotcpp XML数据查询示例,展示了PHP、Ajax和XML三者的简单交互操作。这个例子演示了如何通过Ajax异步请求获取XML数据,并在前端解析和显示。

点赞(0)

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

Dotcpp在线编译      (登录可减少运行等待时间)