zoukankan      html  css  js  c++  java
  • Ajax详解

    AJAX = Asynchronous JavaScript and XML(异步的 JavaScript 和 XML)。

    AJAX 不是新的编程语言,而是一种使用现有标准的新方法。

    AJAX 最大的优点是在不重新加载整个页面的情况下,可以与服务器交换数据并更新部分网页内容。

    AJAX 不需要任何浏览器插件,但需要用户允许JavaScript在浏览器上执行。

    异步交互:客户端给服务器发送一个请求,服务器给客户端一个响应,响应回来的数据不会把原来的页面覆盖掉,这种我们称为异步交互。

     AJAX的应用

    1 <script>
    2   var xhr = new XMLHttpRequest()  //创建一个对象
    3   xhr.open('GET','/helloAjax.json',false)  //设置ajax,.open()方法里面的三个参数分别是:要发送的请求类型、请求的url、表示是否异步发送请求的布尔值
    4   xhr.send()  //发出请求
    5   var data = xhr.responseText  //当请求到来时,读取请求中的数据
    6   console.log(data)  //输出
    7 </script>
     1 //利用XMLHttpRequest对象去进行交互.
     2 //交互分为四步
     3 //1:创建对象
     4 var xhr=new XMLHttpRequest();
     5 //2:打开连接
     6 //提交方式,提交的地址
     7 xhr.open("get","login.php?username=zhangsan");
     8 //3:发送数据
     9 xhr.send(null);
    10 //4:接收数据,只能通过异步的方式,就是只能通过回调函数的方式.
    11 //时刻监听这服务器端状态的改变. onreadystatechange 也是xhr 的一个属性.
    12 xhr.onreadystatechange=function(){
    13          //服务器数据响应成功之后会调用这个函数.
    14 
    15         //因为我跟服务器进行交互,服务器会进行处理
    16         //在处理的过程当中会不断的给我一些状态.  0,1,2,3,4
    17         //每个状态代表的是不同的含义
    18         //状态我通过xhr 去获取到试一下.
    19         //readyState 属性去获取到
    20         //如果状态等于 4 代表响应完成
    21         if(xhr.readyState==4){  //响应完成.
    22                 //console.log("响应完成") 如果响应的是200 才代表响应成功
    23                 //我们要获取到服务器端状态吗.
    24                 if(xhr.status==200){
    25                     //真正的处理.
    26                     //响应完成的,响应是成功的.
    27                     //接收服务器端返回的数据.responseText 用来接收服务器响应的数据的
    28                     var data=xhr.responseText;
    29                     document.querySelector("span").innerHTML=data;
    30                 }
    31         }
    32 }
    33 
    34 get 交互与post 交互需要注意的细节:
    35 get 注意:请求的参数在地址栏当中,send 方法不能省略
    36 post 注意需要有一个特殊的请求头 Content-Type: application/x-www-form-urlencoded
    37 请求的参数写在send 里面

    Status 为200才表示响应成功。

    xhr.state ==4 只是表示完成响应了。

    常见Status状态码

    • 200 – 服务器成功返回网页
    • 404 – 请求的网页不存在
    • 503 – 服务器超时
    • 403 – 资源不可用

    出现这个错误

    • 要么name值没有传
    • 要么没有写请求头  Content-Type : application/x-www-form-urlencoded

    这个请求头一定要放在  open之后 send之前!!!

     

    POST和GET请求区别

    GET  :请求的参数在地址栏中,send方法不能省略

    POST : 有一个特殊的请求头 Content-Type : application/x-www-form-urlencoded 。 请求的参数写在send里面。

    为了应对服务器返回的复杂数据 ,市面上出现了两种数据格式:

    • XML(可拓展标记语言) 历史悠久,早先的系统都是用XML  (宗旨是传输数据 还可以用来配置文件) 
    服务器

    怎么去响应xml 格式的数据
    设置一个响应头,告诉客户端,服务器返回的是一个xml 格式的文本。
    header("Content-Type:text/xml;charset=utf-8");
    输出XML格式的数据
    echo "";

    客户端
    1 怎么去接收XML格式的数据并解析,
    2 xml 跟 html 的语法非常相似,解析html 的时候我们使用dom 对象,然后调用dom 的api 去进行解析.
    3 xml 假设可以转换成html,就可以按照html 方式去进行解析。
    4 
    5 怎么将xml 数据的格式,转换成dom 对象
    6 1:服务器,必须设置一个响应头  Content-Type:text/xml;charset=utf-8
    7 2:客户端接收数据,接收普通文本  responseText,接收的是有格式的xml
    8 
    9 使用 xhr.responseXML;
    • JSON 互联网的项目的数据交互都是采用JSON

    概念

    即 JavaScript Object Notation,另一种轻量级的文本数据交换格式,独立于语言。

    语法规则

    json 的数据格式是以键值对的方式进行存储,key=value,key=value
    数据在名称/值对中
    数据由逗号分隔(最后一个健/值对不能带逗号)
    花括号保存对象方括号保存数组
    使用双引号

    怎么表示数据

      

    表示一条记录
    {"id":11,"username":"xiaoqin","loginName":"xiaoxuanfeng","password":"111111"}
    表示多条记录(数组)
    [
        {"id":11,"username":"xiaoqin","loginName":"xiaoxuanfeng","password":"111111"},
        {"id":22,"username":"heixuanfeng","loginName":"heixuanfeng","password":"111111"}
    ]
    表示复杂数据
    {
            response:{
                    rows:[
                    {"id":11,"username":"xiaoqin","loginName":"xiaoxuanfeng","password":"111111"},
                 {"id":22,"username":"heixuanfeng","loginName":"heixuanfeng","password":"111111"}
                ]
            },
            "status":200
    }

    一些大型公司对外提供的接口,响应的数据格式就是这两种。

    得到了数组数据,如何转化为JSON格式?

    1. 最傻的办法 : 遍历数组,拼装

    2. php 或者java,node.js 这种服务器对json 的格式的支持比较友好

        php 可以将一个关联数组的数据直接转换成json 格式   json_encode($list);

    服务器端怎么发送json 格式的数据
       实际上在开发的过程当中,服务器返回的数据都是从数据库取出来的,取出来的可能是一条记录,也可能是多条记录,我们怎么把这些格式的数据响应到客户端,然后在客户端进行解析。
       
    服务端:
         怎么将数据库的数据获取到转换成json 格式的数据,向客户端输出。
         header("Content-Type:text/json;charset=utf-8");
    客户端:
         怎么接收到服务器端返回的数据并解析.        
         第一种解析方式:  eval();    要把数据用这样的形式包裹起来  eval("("+data+")")
    提示虽然 eval() 的功能非常强大,但在实际使用中用到它的情况并不多。 第二种解析方式: JSON.parse();

    和后台对接需要的东西:

    1. 请求的地址。
    2. 请求的参数,参数对应的要求和说明。
    3. 提交的方式。
    4. 响应的数据格式的说明。

    AJAX读取JSON数据时跨域错误

    1. 最简单的解决办法 :  dataType: "jsonp"

    2.注意点 这里的cityName不要加引号: val()返回的已经是字符串了,所有能够直接在控制台输出的值都是字符串(数字除外)

    3.HTML与XML的区别

    比较内容 html xml
    设计目标 显示数据,如何更好地显示数据,焦点是数据外观 描述数据,什么是数据,如何存放数据,焦点是数据的内容
    语法 不要求标记的嵌套、配对等;
    不区分大小写
    引号是可用可不用的;
    可以拥有不带值的属性名;
    过滤掉空格;
    严格要求嵌套、配对,并遵循DTD的树形结构;
    区分大小写;
    属性值必须分装在引号中;
    所有的属性都必须带有相应的值;
    空白部分不会被解析器自动删除;
    xml比html 语法要求更严格
    数据和显示的关系 内容描述与显示方式整合为一体 内容描述与显示方式分离
    标签 预定义 免费、自定义、可扩展
    可读性及可维护性 难于阅读、维护 结构清晰、便于阅读、维护
    结构描述 不支持深层的结构描述 文件结构嵌套可以复杂到任何程度
    与数据库的关系 没有直接联系 与关系型和层状数据库均可对应和转换
    超链接 单文件、书签链接 可以定义双向链接、多目标链接、扩展链接

    4.

  • 相关阅读:
    抓老鼠啊
    币值转换
    打印沙漏
    秋季学习总结
    第五周课程总结&试验报告(三)
    第四周课程总结&试验报告2
    实验报告一 &第三周课程总结
    Java第二周总结
    2019春总结作业
    第十六周
  • 原文地址:https://www.cnblogs.com/it-Ren/p/10659296.html
Copyright © 2011-2022 走看看