Android精选jQuery

PHP获取XML传递的数据

2018-12-20  本文已影响50人  饮杯梦回酒

导读:

实现:

<?xml version="1.0" encoding="UTF-8" ?>
<root>
    <!--传递的数据-->
    <name>饮杯梦回酒</name>
    <sex>male</sex>
</root>

1.PHP获取XML数据

<?php
  header("Content-type:application/xml"); //  还有一种是类型是:text/xml 二者本质的区别在于编码,前者采用XML中自定义的编码(推荐)
  echo file_get_contents("info.xml"); 
?>

2.在Ajax中获取数据
ps:这里我利用原生JS封装好了一个自己的myAjax方法(简书MarkDown不支持页内跳转,故源码放在页面底部)

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <script src="../myAjax-jQ.js"></script>
</head>
<body>
    <script type="text/javascript"> 
        window.onload = function() {
            var btn = document.getElementsByTagName("button")[0];
            btn.onclick = function() {
                myAjax({
                    type: "GET",
                    url: "ajax-xml.php",
                    success: function(xhr) {
                        var res = xhr.responseXML; //  res打印出来就是#document(与HTML的简直一模一样)
                        console.log(res.querySelector("name").innerHTML, res.querySelector("sex").innerHTML);
                    },
                    error: function(xhr) {
                        alert(xhr.status);
                    }
                })
            }       
        }
    </script>
    <button>发送请求</button>
</body>
</html>

最终在浏览器得到返回结果如下:


Result

总结:

function obj_new(data) {
    //  防止IE7↓有Ajax缓存,所以每次请求时都动态的改变URL参数
    data.t = new Date().getTime();
    var res = [];
    for(var key in data) {
        //  URL中不能出现中文,使用encodeURIComponent方法进行转码
        res.push(encodeURIComponent(key)+"="+encodeURIComponent(data[key]));
    }
    return res.join("&");
}
function myAjax(option) {
    //  把传入的对象转化成URL字符串形式
    if(option.data){
        var str =  obj_new(option.data);
    }   
    var xmlhttp, timer;
    //  创建异步请求对象
    if (window.XMLHttpRequest)
    {// code for IE7+, Firefox, Chrome, Opera, Safari
        xmlhttp=new XMLHttpRequest();
    }else {// code for IE6, IE5
        xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
    }
    if(option.type.toUpperCase() == "GET") {
        xmlhttp.open(option.type, option.url+"?"+str, true);
        xmlhttp.send(); 
    } else {
        xmlhttp.open(option.type, option.url, true);
        xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
        xmlhttp.send(str);
    }

    xmlhttp.onreadystatechange = function() {
        clearInterval(timer);
        if(xmlhttp.readyState === 4) {
            if(xmlhttp.status >= 200 && xmlhttp.status < 300 || xmlhttp.status == 304) {
                option.success(xmlhttp);
            } else {
                option.error(xmlhttp);
            }
        }
    }
    //  判断是否传入了超时时间
    if(option.timeout) {    
        timer = setInterval(function(){
            console.log("中断请求");
            xmlhttp.abort();
            clearInterval(timer);
        }, option.timeout)
    }
}
上一篇下一篇

猜你喜欢

热点阅读