PHP. 03 .ajax传输XML、 ajax传输json、封装

XML简介

XML 指可扩展标记语言 EXtensible Markup Language 。设计的时候是用来传递数据的,虽然格式跟HTML类似

xml示例

<?xml version="1.0" encoding="UTF-8"?>
<singer>
<name>Jay</name>
<age>18</age>
<skill>Sing</skill>
</singer>

xml是纯文本。xml是纯文本,这点跟HTML很像,所以我们可以用任何的文本编辑软件去打开编辑它

XML语法

虽然看起来跟HTML类似,但是XML的语法有些需要注意的,更为详细的可以查阅w3cschool_xml教程

XML声明 第一行是XML的声明,指定XML版本(1.0)以及使用的编码(UTF-8万国码) ,文件类型为name.xml

<?xml version="1.0" encoding="UTF-8"?>

自定义标签  XML 中没有默认的标签,所有的标签都是我们定义者 自定义的

双标签  XML中没有但标签,都是双标签

根标签      XML中必须有一个根节点,所有的子节点都放置在根节点下

<root>
    <name></name>
</root>

XML属性 跟HTML一样,XML的标签里面也能够添加属性type=‘text‘,但是不建议这样用,而是使用标签的方式来表述内容(下半部分代码)

<!-- 使用属性配合标签表述信息 -->
    <persion sex="female">
        <firstname>Anna</firstname>
        <lastname>Smith</lastname>
    </persion>
<!-- 使用标签来表述信息 -->
    <persion>
        <sex>female</sex>
        <firstname>Anna</firstname>
        <lastname>Smith</lastname>
    </person>

XML解析

因为 XML 就是标签,所以直接用解析 Dom 元素的方法解析即可

html代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style type="text/css">
        table{
            margin: 100px auto;
            width: 400px;
        }
        td{
            border: 1px solid #0094ff;
        }
    </style>
</head>
<body>
    <h1>ajax获取 多个明星数据</h1>
    <input type="button"  value="获取男神们?" id=‘getStars‘>
</body>
</html>
<script type="text/javascript">
    // 绑定点击事件
    document.querySelector(‘#getStars‘).onclick = function () {
        var ajax = new XMLHttpRequest();

        // post
        ajax.open(‘post‘,‘getStars.php‘);

        // 设置 请求的报文
        ajax.setRequestHeader("Content-type","application/x-www-form-urlencoded");

        // 发送
        ajax.send();

        // 注册事件
        ajax.onreadystatechange = function () {
            if (ajax.readyState==4 && ajax.status==200) {
                // 知道返回的是 xml
                console.log(ajax.responseXML);

                // document对象哦
                var persons = ajax.responseXML.querySelectorAll(‘person‘);
                console.log(persons);    

                // 在循环之前 把table的 拼出来

                var str =‘‘;

                // <table>
                str+=‘<table>‘;

                // 循环 获取其中的某一个
                for (var i = 0; i < persons.length; i++) {
                    // 获取 当前循环的那个person标签对象
                     var currentPerson =  persons[i];

                     // 获取 其中的 每一个值
                     console.log(currentPerson.querySelector(‘name‘).innerHTML);
                     console.log(currentPerson.querySelector(‘path‘).innerHTML);
                     console.log(currentPerson.querySelector(‘skill‘).innerHTML);

                     // 方法1 创建一个 table
                     /* js创建dom元素 再添加 比较繁琐
                         document.createElement(‘table‘).appendChild();
                         document.createElement(‘tr‘);
                         document.createElement(‘td‘);
                     */

                     // 直接 拼接出 一个 table的 字符串 然后 设置到页面上即可

                     // 拼接开头
                     str+=‘<tr>‘;

                     str+=‘<td>‘+currentPerson.querySelector(‘name‘).innerHTML+‘</td>‘;
                     // 这里需要添加的是图片
                     // str+=‘<td>‘+currentPerson.querySelector(‘path‘).innerHTML+‘</td>‘;
                     str+=‘<td><img src="‘+currentPerson.querySelector(‘path‘).innerHTML+‘"></td>‘;
                     str+=‘<td>‘+currentPerson.querySelector(‘skill‘).innerHTML+‘</td>‘;

                     // 再次添加一个td
                      str+=‘<td><a href="#">点击了解更多_‘+currentPerson.querySelector(‘name‘).innerHTML+‘</a></td>‘;

                     // 拼接结尾
                     str+=‘</tr>‘;

                }

                // 循环完毕以后 将table 合并
                // </table>
                str+=‘</table>‘;

                // 测试 拼接的 内容 是否正确
                console.log(str);

                // 直接 添加到页面上
                document.body.innerHTML = str;
            }
        }
    }
</script>

html代码

php代码

在php中如果要使用xml传输数据,需要使用header()设置返回的内容为xml

<?php
    // 设置返回的是xml
    header(‘content-type:text/xml; charset=utf-8‘) ;
    // 读取并返回 oh -yeah
    echo file_get_contents( ‘starList.xml);
?>

XML文件

<?xml version="1.0" encoding="UTF-8"?>
<stars>
    <person>
        <name>盖伦</name>
        <path>images/hzt.jpg</path>
        <skill>转圈</skill>
     </person>
    <person>
        <name>赵信</name>
        <path>images/xy.jpg</path>
        <skill>爆菊花</skill>
    </person>
</stars>

JSON语法

JSON( JavaScript Object Notation ) 是 ECMAScript 的子集,作用是进行数据的交换,而且由于语法更为简洁,网络传输、解析都更为迅速 文件名类型为 name.json

语法规则:

  对象 使用{}包裹

  数组 使用[]包裹

 属性名 使用双引号包裹

 属性名 跟属性值之间 使用冒号分割

 属性值 也必须使用双引号包裹(数字可以不包裹)

数据类型:

下列内容无论键、值 都是用双引号包起来

  数字(整数或浮点数)/字符串(在双引号中)/逻辑值(true/false)/数组(在方括号中)/对象(在花括号中)/null

示例代码:

// 基本对象{  "name":"fox",   "age":"18 ",   "sex":"true",   "car":"null"}// 数组[ {  "name":"小小",   "age":"1" }, {  "name":"大大",   "age":"2"  }]

JSON 解析

JavaScript使用JSON对象

  JSON.parse()方法:将JSON字符串转化为JavaScript对象 需要接收

  JSON.stringify()方法:将JavaScript对象,转化为JSON字符串 需要接收

  IE(8以下)浏览器中没有 JSON 对象,通过导入 JSON2.js 框架即可解决,框架获取地址JSON2.js_github地址

<script type="text/javascript">
    var obj = {
        name:"fox",
        age:18,
        skill:"撩妹"
    };  
    console.log( "原生形式"+obj);
  //将javaScript对象格式化为JSON字符串
    var jsonStr = JSON.stringify(obj);
    console.log("我是json字符串"+jsonStr); // 将JSON字符串 格式化为javaScript对象  var jsonObj = JSON.parse(jsonStr);  console.log("我是javaScript对象+jsonObj ");  
</script>

使用eval() 方法将 json字符串 转化为 javaScript对象

  需要将内容使用()括号包裹起来,

    var jsonStr1 = ‘{ "name":"fox","age":18,"skill":"撩妹" }‘    ;
    var jsonObj = eval(‘(‘+jsonStr1+‘)‘);
    console.log(jsonObj);
    console.log(jsonObj.name);

json_decode()  : 将json字符串 转化为变量

json_encode()  :   将变量转化为‘json’字符串

<?php    header("Content-Type:text/html;charset=utf-8");
    // json字符串
        $jsonStr = ‘{"name":"itcast","age":54,"skill":"Singing"}‘;
    // 字符串转化为php对象
        print_r(json_decode($jsonStr));
        echo ‘<br>‘;
    // php数组
        $arrayName = array(‘name‘=>‘littleFox‘,‘age‘=>12);
    // php对象转化为json字符串
        print_r(json_encode($arrayName));

使用例子:

json:

[
    {
        "name":"jay",
        "skill"  :"singing",
        "path" :"images/jay.jpg"
    }
    {
        "name":"ED",
        "skill"  :"singing",
        "path" :"images/ed.jpg"
    }
]

php:

<?php
    echo file_get_contents(‘info/stars.json);
?>

html:

<body>
    <input type="button" value="获取" id=‘getStars‘>
</body>
<script type="text/javascript">
    document.querySelector("#getStars").onclick = function(){
        var ajax = new XMLHttpRequest() ;
        ajax.open(‘post‘,‘getStars.php‘);
        ajax.setRequestHeader("content-type","application/x-www-form-urlencoded");

        ajax.send();

        ajax.onreadystatechange = function(){
                if(ajax.readystate ==4 && ajax.status==200){
            // 转化为js对象,不光是数组还是对象都可以使用该方法转化
                var strArr = JSON.parse(ajax.responseText);
            // 这里也方法哦一个table中
                var str="";
                str+=‘<table>‘
                    for(var i=0;i<strArr.length;i++){
                      str+=‘<tr>‘;
                      str+=‘<td>‘ +strArr[i].name+‘</td>‘. ;
                      str+=‘<td>‘ +strArr[i].skill +‘</td>‘. ;
                      str+=‘<td><img src="‘+strArr[i].path+‘"></td‘;
                      str+=‘</tr>‘;
                     }
               document.body.innerHtml = str ;
            }
   }
</script>
    

封装一下

// ajax get 五部曲
function ajax_get(url,data) {
    // 异步对象
    var ajax = new XMLHttpRequest();

    // url 方法
    // 如果是get发送数据 发送的格式为 xxx.php?name=jack&age=18
    // 所以 这里 需要拼接 url
    if (data) {
        // 如果有值 需要拼接字符串
        // 拼接为xxx.php?name=jack&age=18
        url+=‘?‘;
        url+=data;
    }else{
    }

    ajax.open(‘get‘,url);
    // 发送
    ajax.send();

    // 注册事件
    ajax.onreadystatechange = function () {
        // 在事件中 获取数据 并修改界面显示
        if (ajax.readyState==4&& ajax.status==200) {
            console.log(ajax.responseText);
        }
    }
}

// ajax_post五部曲
function ajax_post(url,data) {
    // 异步对象
    var ajax = new XMLHttpRequest();

    // url 方法
    ajax.open(‘post‘,url);

    // 设置 请求报文
    ajax.setRequestHeader("Content-type","application/x-www-form-urlencoded");

    // 发送
    if (data) {
        // 如果 有值 post请求 是在 send中 发送给服务器
        ajax.send(data);
    }else{
        ajax.send();
    }

    // 注册事件
    ajax.onreadystatechange = function () {
        // 在事件中 获取数据 并修改界面显示
        if (ajax.readyState==4&&ajax.status==200) {
            console.log(ajax.responseText);
        }
    }

}

// 将 get 跟post 封装到一起
/*
    参数1:url
    参数2:数据
    参数3:请求的方法
    参数4:数据成功获取以后 调用的方法
*/
function ajax_tool(url,data,method,success) {
    // 异步对象
    var ajax = new XMLHttpRequest();

    // get 跟post  需要分别写不同的代码
    if (method==‘get‘) {
        // get请求
        if (data) {
            // 如果有值
            url+=‘?‘;
            url+=data;
        }else{

        }
        // 设置 方法 以及 url
        ajax.open(method,url);

        // send即可
        ajax.send();
    }else{
        // post请求
        // post请求 url 是不需要改变
        ajax.open(method,url);

        // 需要设置请求报文
        ajax.setRequestHeader("Content-type","application/x-www-form-urlencoded");

        // 判断data send发送数据
        if (data) {
            // 如果有值 从send发送
            ajax.send(data);
        }else{
            // 木有值 直接发送即可
            ajax.send();
        }
    }

    // 注册事件
    ajax.onreadystatechange = function () {
        // 在事件中 获取数据 并修改界面显示
        if (ajax.readyState==4&&ajax.status==200) {
            // console.log(ajax.responseText);

            // 将 数据 让 外面可以使用
            // return ajax.responseText;

            // 当 onreadystatechange 调用时 说明 数据回来了
            // ajax.responseText;

            // 如果说 外面可以传入一个 function 作为参数 success
            success(ajax.responseText);
        }
    }

}

使用代码:

get方式:

php:

<?php
    // 获取get提交的数据
    echo $_GET[‘skill‘];
 ?>

html:

<body>
    <input type="button"  value="测试get" id=‘ajax_get‘>
</body>
</html>
<!-- 导入 封装的js -->
<script type="text/javascript" src=‘ajax_tool.js‘></script>
<script type="text/javascript">
    document.querySelector(‘#ajax_get‘).onclick = function () {
        // 直接使用 封装的 工具函数即可
        /*
            参数1:url
            参数2:数据
            参数3:请求的方法
        */
        var backData = ajax_tool(‘01.test_get.php‘,‘name=huluw&skill=saveyeye‘,‘get‘,function(data){
            console.log(data);
        });
        // 测试
        console.log(backData);
    }
</script>

post方式:

php:

<?php
    echo $_POST[‘friend‘];
 ?>

html:

<body>
    <input type="button"  value="测试post" id=‘ajax_post‘>
</body>
</html>
<!-- 导入 封装的js -->
<script type="text/javascript" src=‘ajax_tool.js‘></script>
<script type="text/javascript">
    document.querySelector(‘#ajax_post‘).onclick = function () {
        // 直接使用 封装的 工具函数即可
        /*
            参数1:url
            参数2:数据
            参数3:请求的方法
            参数4:数据获取成功调用的方法
        */
        var backData = ajax_tool(‘02.test_post.php‘,‘friend=好丽友‘,‘post‘,function(data){
            console.log(data+"---dddd-----");
        });
        // 测试
        console.log(backData+"我是backdata");

        // 怎么样 处理数据 全部写在 匿名函数中
        ajax_tool(‘02.test_post.php‘,‘friend=好丽友‘,‘post‘,function(data){
            console.log(data+"我是ajax_tool");
            // 修改页面的显示呢?
        });

    }
</script>
时间: 2024-10-09 01:41:35

PHP. 03 .ajax传输XML、 ajax传输json、封装的相关文章

ajax中网页传输(二)JSON——下拉列表显示练习

以json返回数据类型显示“民族下拉列表” 第一:body页面显示部分 <title>JSON下拉显示Nation表中的数据</title> <script src="jquery-2.0.0.min.js"></script> </head> <body> <h1>用下拉显示Nation表中的数据</h1> <select id="sel"> </se

20151228:AJax返回XML值

aspx代码: <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default2.aspx.cs" Inherits="Default2" %> <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="s

XML(php中获取xml文件的方式/ajax获取xml格式的响应数据的方式)

1.XML 格式规范: ① 必须有一个根元素 ② 不可有空格.不可以数字或.开头.大小写敏感 ③ 不可交叉嵌套 ④ 属性双引号(浏览器自动修正成双引号了) ⑤ 特殊符号要使用实体 ⑥ 注释和HTML一样 虽然可以描述和传输复杂数据,但是其解析过于复杂并且体积较大,所以实现开发已经很少使用了.   例: <?xml version="1.0" encoding="UTF-8"?> <root> <arrayList> <arr

ajax 传值,Ajax: Asynchoronous Javascript and xml (异步的js和xml). 异步刷新,异步传递.替代表单提交数据,回调函数处理返回的数据

aspx里的代码 <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %> <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="s

ASP.NET AJAX Call Web Service , Return JSON Format String

最近同事问用ASP.NET AJAX Call Web Service可以返回DataTable吗?现在公司项目的后台很多都直用AJAX作掉,达到异步的效果,目前公司的作法是用Web Service回传一个 List 到前端给JavaScript作Parse,Parse过程花调许多程序与性能,所以问题来了,如果能直接返回DataTable该有多好啊!? 最近同事问用ASP.NET AJAX Call Web Service可以返回DataTable吗? 现在公司项目的后台很多都直用AJAX作掉,

jQuery $.ajax跨域-JSONP获取JSON数据(转载)

Asynchronous JavaScript and XML (Ajax ) 是驱动新一代 Web 站点(流行术语为 Web 2.0 站点)的关键技术.Ajax 允许在不干扰 Web 应用程序的显示和行为的情况下在后台进行数据检索.使用 XMLHttpRequest 函数获取数据,它是一种 API,允许客户端 JavaScript 通过 HTTP 连接到远程服务器.Ajax 也是许多 mashup 的驱动力,它可将来自多个地方的内容集成为单一 Web 应用程序. 不过,由于受到浏览器的限制,该

通过jquery的ajax异步请求接收返回json数据

jquery的ajax异步请求接收返回json数据方法设置简单,一个是服务器处理程序是返回json数据,另一种就是ajax发送设置的datatype设置为jsonp格式数据或json格式都可以. 代码示例如下: $('#send').click(function () { $.ajax({ type : "GET", url : "a.php", dataType : "jsonp", success : function (data) { $.

前端ajax用post方式提交json数据给后端时,网络报错 415

项目框架:spring+springmvc+mybatis 问题描述:前端ajax用post方式提交json数据给后端时,网络报错 415 前端异常信息:Failed to load resource: the server responded with a status of 415 (Unsupported Media Type) 后端异常信息:无 报错原因:缺少jackson包 类似问题注意点: springmvc添加配置.注解: pom.xml添加jackson包引用: Ajax请求时没

多级联动系列——ajax调用XML实现三级联动

ajax 使用起来特别的方便,再也不操心浏览器兼容问题了.用ajax调用XML页面中的内容,来生成三级联动,OK废话不多说,跟着我一步步写吧. 首先写一个XML文件.data.xml <?xml version="1.0" encoding="UTF-8"? > <list> <province name="河南" id='1'> <city name="焦作" id='11'>