Ajax

作者: 致自己_cb38 | 来源:发表于2018-11-18 19:31 被阅读0次

1、跨域:

  • 域:域名协议端口一致的话就叫做同源。只要有一个不同,那么就是不同源。
  • ajax不能请求不同源上的资源。就会产生跨域问题。
  • 解决方案
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>
    <script src="ajax.js"></script>
    <script>
        function log(data){
            console.log(data);
        }
    </script>
    <script src="http://127.0.0.1/ajax3/kuayu.js"></script>
</body>
</html>

2、计算机组成原理:

  • 进程:一个应用程序或者一个计算要完成的功能。一个应用有可能是多个进程。
  • 进程调度:异步,CPU一个时间只能做一件事情。
  • 线程:进程细化。时间化成碎片。

3、Ajax:传输存储数据(页面无刷新技术,JS通过URL加载数据,过程用户不可见)

Asynchronous Javascript And XML(异步 JavaScript 和 XML)

  • 异步(true):不同步,页面无刷新技术(同时做几件事)。
  • 同步(false):一件事完成再做另一件事(一步一步)。

4、JSON:轻量级数据交换格式

JSON对象与字符串相互转化

  • 字符串转化对象
let obj = JSON.parse(str);
let obj = eval('('+str+')');
  • 对象转化字符串
let obj = JSON.stringify(str);

5、Ajax步骤:

  • 创建XMLHttpRequest对象
    兼容
if(window.XMLHttpRequest){
    xhr = new XMLHttpRequest();
}else{
    xhr = new ActiveXObjext('microsoft.XMLHTTP');
}
  • open 建立连接
  • 发送信息
  • 接受信息
    eg:
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>
    <button>获取</button>
    <script>
        document.querySelector('button').onclick=()=>{
            //创建ajax对象(兼容)
            let xhr;
            if(window.XMLHttpRequest){
                 xhr = new XMLHttpRequest();
            }else{
                  xhr = new ActiveXObjext('microsoft.XMLHTTP');
            }
            //建立连接
            xhr.open('get','./1txt.txt?t='+Math.random(),true);
            //发送数据
            xhr.send(null);
            //检测状态
            xhr.onreadystatechange = ()=>{
                //检测是否已经准备好
                if(xhr.readyState==4){
                    //表示响应准备就绪
                    if((xhr.status>=200 && xhr.status<300)||xhr.status==304){
                        //请求成功之后的处理
                        alert(xhr.responseText);
                    }else{
                        //处理ajax返回异常的情形
                    }
                }else{
                    //ajax请求失败的处理
                }
            };
        }
    </script>
</body>
</html>

6、获取XML

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>
    <button>获取</button>
    <script>
        document.querySelector('button').onclick=()=>{
            //创建ajax对象
            let xhr;
            if(window.XMLHttpRequest){
                 xhr = new XMLHttpRequest();
            }else{
                 xhr = new ActiveXObjext('microsoft.XMLHTTP');
            }
            //建立连接
            xhr.open('get','./2xml.xml?t='+Math.random(),true);
            //发送数据
            xhr.send(null);
            //检测状态
            xhr.onreadystatechange = ()=>{
                //检测是否已经准备好
                if(xhr.readyState==4){
                    //表示响应准备就绪
                    if((xhr.status>=200 && xhr.status<300)||xhr.status==304){
                        //请求成功之后的处理
                        let re = createXml(xhr.responseText);
                        //console.log(xhr.responseXML);
                    }else{
                        //处理ajax返回异常的情形
                    }
                }else{
                    //ajax请求失败的处理
                }
            };
        }
//将XML字符串转化为对象
       function createXml(str){
          if(document.all){
              var xmlDom=new ActiveXObject("Microsoft.XMLDOM")
              xmlDom.loadXML(str);
              return xmlDom
            }else{
                 return new DOMParser().parseFromString(str, "text/xml");
            }    
        }
    </script>
</body>
</html>

7、获取POST

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>
    <form action="javascript:;">
        用户名:<input type="text" name="user"><br><br>
        密 码:<input type="password" name="password"><br><br>
    </form>
    <br><br>
    <button>提交</button>
    <script>
        document.querySelector('button').onclick=()=>{
            //创建ajax对象
            let xhr;
            if(window.XMLHttpRequest){
                 xhr = new XMLHttpRequest();
            }else{
                  xhr = new ActiveXObjext('microsoft.XMLHTTP');
            }
            //建立连接
            xhr.open('POST','4.php',true);
            xhr.setRequestHeader("Content-type","application/x-www-form-urlencoded");
            //发送数据
            let form = document.querySelector('form');
            let data = 'user='+ form.user.value +'&password='+form.password.value ;
            //console.log(data);
            xhr.send(data);
            //检测状态
            xhr.onreadystatechange = ()=>{
                //检测是否已经准备好
                if(xhr.readyState==4){
                    //表示响应准备就绪
                    if((xhr.status>=200 && xhr.status<300)||xhr.status==304){
                        //请求成功之后的处理
                        let x = JSON.parse(xhr.responseText);
                        alert(x.message);
                    }else{
                        //处理ajax返回异常的情形
                    }
                }else{
                    //ajax请求失败的处理
                }
            };
        }
    </script>
</body>
</html>

8、Ajax封装

function Ajax(type, url, data, success, failed){
    // 创建ajax对象
    let xhr = null;
    if(window.XMLHttpRequest){
        xhr = new XMLHttpRequest();
    } else {
        xhr = new ActiveXObject('Microsoft.XMLHTTP')
    }
    type = type.toUpperCase();  //转化为大写
    // 用于清除缓存
    let random = Math.random(); //为了防止浏览器缓存
    if(typeof data == 'object'){
        var str = '';
        for(var key in data){
            str += key+'='+data[key]+'&';
        }
        data = str.replace(/&$/, '');
    }
    if(type == 'GET'){
        if(data){
            xhr.open('GET', url + '?' + data, true);
        } else {
            xhr.open('GET', url + '?t=' + random, true);
        }
        xhr.send(null);
    } else if(type == 'POST'){
        xhr.open('POST', url, true);
        // 如果需要像 html 表单那样 POST 数据,请使用 setRequestHeader() 来添加 http 头。
        xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
        xhr.send(data);
    }
    // 处理返回数据
    xhr.onreadystatechange = function(){
        if(xhr.readyState == 4){
            if((xhr.status >= 200&&xhr.status<300)||xhr.status==304){
                success(xhr.responseText);
            } else {
                if(failed){
                    failed(xhr.status);
                }
            }
        }
    }
}

9、三级联动使用ajax封装

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>
    <form action="javascript:;" id="form">
        省:
        <select name="sheng" id="sheng">
            <option value="-1">请选择省份</option>
        </select>
        市:
        <select name="shi" id="shi">
            <option value="-1">请选择市</option>
        </select>
        区/县:
        <select name="xian" id="xian">
            <option value="-1">请选择区县</option>
        </select>
    </form>
</body>
<script src="ajax.js"></script>
<script>
    let form = document.getElementById('form');
    let sheng,shi;
    Ajax('get','http://localhost/ajax3/city.json',null,success,error)
    function success(jsondata){
        json = JSON.parse(jsondata);
        sheng = json.citylist;
        for(let [index,obj] of json.citylist.entries()){
            let option = document.createElement('option');
            option.innerText = obj.p;
            option.value=index;
            form.sheng.appendChild(option);
        }
    }
    function error(){

    }
    form.sheng.onchange=function(){
        // 清除市和县,选择省后再加载
        form.shi.innerHTML = '<option value="-1">请选择市</option>';
        form.xian.innerHTML = '<option value="-1">请选择区县</option>';
        //市的下标(关联区)
        shi = sheng[this.value].c;
        for(let [index,obj] of sheng[this.value].c.entries()){
            let option = document.createElement('option');
            option.innerText = obj.n;
            option.value=index;
            form.shi.appendChild(option);
        }
    };
    form.shi.onchange = function(){
        form.xian.innerHTML = '<option value="-1">请选择区县</option>';
        for(let [index,obj] of shi[this.value].a.entries()){
            let option = document.createElement('option');
            option.innerText = obj.s;
            option.value=index;
            form.xian.appendChild(option);
        }
    };
</script>
</html>

相关文章

  • AJAX

    主要内容: ajax 是什么、原生ajax 写法和jQuery ajax写法。 AJAX 是什么 ajax,即As...

  • JavaScript进阶知识点--AJAX及JSON

    AJAX 关于 AJAX 什么是 AJAX AJAX 的全称是 Asynchronous JavaScript a...

  • HTML5权威指南 | 第五部分 高级功能

    三十二、使用AJAX(上) Ajax起步: 使用Ajax事件: Ajax请求的错误处理: 中止Ajax请求: 三十...

  • ajax学习笔记

    Ajax学习笔记 Ajax简介 1. Ajax是什么? Ajax : Asynochronous javascri...

  • AJAX

    一、简介 AJAX菜鸟教程 什么是 AJAX ? AJAX = 异步 JavaScript 和 XML。 AJAX...

  • js之AJAX复习

    异步交互和同步交互 什么是Ajax? Ajax的工作原理。 Ajax包含的技术: Ajax的缺陷: Ajax的核心...

  • 复习jQuery - ajax

    jQuery ajax - ajax() 方法 $.ajax({ url:'oo.php', ...

  • jQuery中Ajax请求的使用和四个步骤示例

    ajax() 方法用于执行 AJAX(异步 HTTP)请求,所有的 jQuery AJAX 方法都使用 ajax(...

  • ajax

    1、什么是ajax? 2、ajax的原理 3、ajax的核心对象 4、ajax的优点: ajax的缺点: 被jqu...

  • ajax

    Ajax 1 - 请求纯文本 Ajax 2 - 请求JSON数据 Ajax 3 - 请求Github接口 Ajax...

网友评论

      本文标题:Ajax

      本文链接:https://www.haomeiwen.com/subject/whwgfqtx.html