zoukankan      html  css  js  c++  java
  • ajax

    ajax:
    asychronous javascript And XML,
    是指一种创建交互式网页应用的网页开发技术。
    交互:这里的交互指客户端和服务器的数据是可以相互传递和使用的。
    XML:
    一种类似于HTML的标记语言,可以将数据结构化,XML已被JSON淘汰了。
    异步:
    异步指程序可以同时执行,同步指程序需要按照顺序执行。

    w3c标准:
    var xhr = new XMLHttpRequest();
    IE标准:
    new ActiveXObjcet("Msxml2.XMLHTTP"); //msxml3.0;
    new ActiveXObject("Microsoft.XMLHTTP"); //msxml2.6;
    语法:
    xhr.open("GET/POST",url,true/false);
    备注:
    open();
    第一个参数指请求的发送方式,值为get或者post,建议大写。
    第二个参数指请求的url路径。
    第三个参数指请求是异步还是同步,如果写true表示异步(默认true),写false表示同步。
    语法:
    xhr.send(string);
    备注:
    如果是get方式发送请求,send()命令中不用写任何参数。
    传递的数据可以写在url中,服务器用$_GET["参数名"]接收。
    如果是POST方式发送请求,需要设置请求头才能正确把数据传递给后端页面。
    xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
    xhr.send("数据名1=数据值&数据名2=数据值");//服务器用$_POST["参数名"]接收。
    W3C建议我们使用get获取数据,使用post发送数据。
    但实际上,,无论是get还是post,都即可以发送数据,也可以接收数据。
    区别:
    get是以url的方式传递数据,而post是以http请求中的body部分来传递数据,所以有种说法说post更安全。
    get传递数据时,直接在浏览器地址栏中可以看到,而post可以使用开发者工具中看到。
    get传递的数据,中文会被编码或者有可能出现乱码,而post不会。
    get在IE下会走缓存(304),而post不会。

    POST理论上没有长度的限制,HTTP协议没有对POST进行限制,起限制的是服务器的处理程序的处理能力。
    Tomcat默认为2M;IIS默认为4M,也可以通过设置,让POST内容无限大,但要注意服务器和内存能力。

    如何接收响应:
    异步:
    需要通过onreadystatechange监听;
    例如:xhr.onreadystatechange = ()=>{};
    指如果xhr对象的预备好的状态发生了变化时,触发函数。
    同步:
    不需要监听,可以直接获取响应 xhr.responseText;
    异步时:
    需要通过onreadystatechange监听
    xhr.onreadystatechange = ()=>
    {
    if(xhr.readyState===4&&xhr.status===200)
    {
    //do Something(){};
    alert(xhr.responseText);
    }
    }
    请求状态4:响应已完成;您可以获取服务器的响应了。
    HTTP状态200:ok,页面正确打开,并的到完整的响应内容。
    //========================================
    onreadystatechange指本次ajax请求的状态发生改变时所触发的事件
    readyState 指请求状态
    0:请求未初始化(还没有调用 open())。
    1:请求已经建立,但是还没有发送(还没有调用 send())。
    2:请求已发送,正在处理中(通常现在可以从响应中获取内容头)。
    3:请求在处理中;通常响应中已有部分数据可用了,但是服务器还没有完成响应的生成。
    4:响应已完成;您可以获取并使用服务器的响应了。
    status 指http状态(常用的http状态码,稍微了解下即可)
    200:ok,页面正确打开,并得到完整的响应内容。
    301:被请求的资源已永久移动到新位置
    302:请求的资源临时从不同的 URI响应请求
    304:缓存
    404:页面不存在。
    500:常指后端代码发生错误
    503:由于临时的服务器维护或者过载,服务器当前无法处理请求。
    responseText指接收到的响应结果


    在使用AJAX时,是需要编写大量代码的,所以我们通常会把AJAX封装成一个函数,使用时直接调用即可。

    然后通过回调函数的方式,当响应数据拿到之后,触发该函数。

    回调函数解决的是,在异步程序中,想要按照顺序执行代码的方式。即某个异步程序执行完,执行某个函数。

    function get(url, fn){
        var xhr = new XMLHttpRequest();
        xhr.open("GET", url, true);
        xhr.send();
        xhr.onreadystatechange = function(){
            if( xhr.readyState==4 && xhr.status==200 ){
                if( fn ){
                    fn(xhr.responseText);
                }
            }
        }    
    }
    
    
    function post(url, data, fn){
        var xhr = new XMLHttpRequest();
        xhr.open("POST", url, true);
        xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
        xhr.send(data);
        xhr.onreadystatechange = function(){
            if( xhr.readyState==4 && xhr.status==200 ){
                if( fn ){
                    fn(xhr.responseText);
                }
            }
        }    
    }
    
    
    
    var promise_get = url => {
        return new Promise( (succ, err)=>{
            get(url, str=>{
                succ(str);
            });
        } );
    }
  • 相关阅读:
    git 无法提交到远程服务器【转载】
    vscode 常用快捷键
    mongodb nodejs一个有自增id的功能
    C++ lambda表达式与函数对象
    TypeScript的async, await, promise,多参数的调用比较(第2篇)
    了解TypeScript的async,await,promise(第1篇)
    TyepScript判断一个变量是null, or undefined
    MongoClient 对 Mongodb的 增删改查 操作
    TypeScript第一个Promise程序
    C++基类的继承和多态
  • 原文地址:https://www.cnblogs.com/l8l8/p/8961020.html
Copyright © 2011-2022 走看看