• Ajax简单用法


    Ajax是啥?
    Ajax是允许客户端与服务端通信而无需刷新当前页面的一种技术,不是一种语言。

    如何完成一个完整的Ajax交互?
    交互分三步:
    创建Ajax对象:XMLHttpRequest对象(XMLHttpRequest对象是Ajax的基础)
    发送请求:
    1.onreadystatechange事件处理函数:该函数由服务器触发,而不是由用户触发。在Ajax执行过程中,服务端会向用户端发送当前的状态(通过XMLHttpRequest对象的ReadyState属性)。在请求过程中,该函数会被触发4次。
    2.open方法:建立请求open(method,url,asynch)。规定请求方式、地址和是否异步传输。
    3.send方法:将请求发送到服务器。如果请求方式是post,send方法可以传递参数
    接收响应
    1.readyState:存储XMLHttpRequest的状态值(0-4).0:请求未初始化,1:服务器已建立连接,2.请求已接收,3.请求处理中,4.请求已完成,且相应已就绪。当readyState的值发生改变时,会调用onreadystatechange函数。
    2.status:在XMLHttpRequest对象中,服务器发送的状态码都被保存在status属性中。通过将这个属性值与200和304比较,确保服务器是否发送了一个成功的响应。404:没找到界面,403.禁止访问,500.内部服务器错误,200.一切正常,304.没有被修改。
    3.responseText:服务器向客户端发送的文件,它是一个HTML,XML或普通文本,这取决与服务器发送的内容,当readyState状态值变为4时,responseText才可用,表明Ajax请求已结束。
    4.responseXML:如果服务器返回的是XML文件,那么数据将存储在responseXML属性中,只有服务器发送了正确的首部地址的信息时,responseXML属性才可用。

    下面插入一个简单的demo

    var xhr = new XMLHttpRequest();
    var testData= {"tempStr":"sss"};
    xhr.open("post", "http://localhost:14104/test/login");
    xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    xhr.send(null);
    xhr.onreadystatechange = function () {
        if (xhr.readystate == 4) {
            //响应内容解析完成,可以在客户端调用了
            if (xhr.status == 200) {
                //客户端的请求成功了
                console.log(xhr.responseText);
            }
        }
    }

    再来一个jquery版本的demo

    $.ajax({
        //请求方式
        type : "get",
        //请求的媒体类型
        contentType: "application/json;charset=UTF-8",
        //请求地址
        url : "http://localhost:14104/test/login?tempStr='sss'",
        //数据,json字符串
        data : null,
        //请求成功
        success : function(result) {
            console.log(result);
        },
        //请求失败,包含具体的错误信息
        error : function(e){
            console.log(e.status);
            console.log(e.responseText);
        }
    });

    需要注意的事项有以下几点:

    1、get方式请求的时候,容易因为易泄露信息而阻止请求。后台需要将JsonRequestBehavior 设置为 AllowGet。我简单写成:return Json(person, JsonRequestBehavior.AllowGet);

    2、就是跨域问题,相当尴尬,报个资源加载失败,完全想不到是跨域问题。熬夜到三点,说多了都是泪。解决方案:https://www.cnblogs.com/liangshibo/p/12275129.html

    遇到坑继续来填。。。

  • 相关阅读:
    企业级 SpringBoot 教程 (九)springboot整合Redis
    03 网格系统
    02 表单
    01 排版
    客户端调用webSerices
    sql 一行转多行
    sql 多行转一行
    时间差计算 Stopwatch
    sql 游标
    Linq连接查询
  • 原文地址:https://www.cnblogs.com/liangshibo/p/12275089.html
Copyright © 2020-2023  润新知