JavaScript(六)

101 阅读1分钟

ajax

前端向后端异步的取数据的而无需刷新页面技术(重点:无需刷新页面)

使用ajax 的步骤

//1.创建ajax核心对象
        var xmlhttp=new XMLHttpRequest();
 //2.创建请求  get/post   请求地址   是否异步
        xmlhttp.open("get","my.php?user=982395099&psd=123456",true)
 //3.发送请求参数  key=value形式的字符串 多个参数之间以&连接
   //get请求 请求参数不能写在send里面,要写在请求地址后面,以?连接 send里传null
        xmlhttp.send(null);
   //如果请求方式为post,需要设置请求头
        xmlhttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded")
  //4.接收响应
      //onreadystatechange
      // readyState (请求的状态) 0(尚未初始化) 1(正在请求)2(请求完毕) 3(正在响应) 4(响应完毕)
      // status(服务端返回的状态码) 404 500 200(ok) 301 304
          xmlhttp.onreadystatechange=function(){
              if(xmlhttp.readyState==4&&xmlhttp.status==200){
                  //responseText   可以服务器端返回的文本格式的数据
                 var data=xmlhttp.responseText
              }
          }

直接复制使用版

        var xmlhttp=new XMLHttpRequest();
        xmlhttp.open("get","my.php?user=982395099&psd=123456",true)
        xmlhttp.send(null);
        xmlhttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded")
     
          xmlhttp.onreadystatechange=function(){
              if(xmlhttp.readyState==4&&xmlhttp.status==200){
                 var data=xmlhttp.responseText
              }
          }

案例

案例一

<input type="text" id="search">
    <h1> 我是一个上线的项目</h1>
    <button id="btn">加载数据</button>
    <h2 id="title"></h2>
    <script>
        var title = document.getElementById("title");
        var btn = document.getElementById("btn");
        function getData(){
        var xmlhttp=new XMLHttpRequest();
        xmlhttp.open("get","my.php?user="+search.value,true);
        xmlhttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
        xmlhttp.send(null);
        xmlhttp.onreadystatechange=function(){
            if(xmlhttp.readyState==4&&xmlhttp.status==200){
                var data=xmlhttp.responseText
                //dom操作动态生成
                title.innerHTML = data
                console.log(data);
            }
          }
        }

        btn.onclick = getData;
    </script>

案例二 查询省市区

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <select name="" id="province">
        <option value="">请选择省份</option>
    </select>
    <select name="" id="city">
        <option value="">请选择城市</option>
    </select>
    <select name="" id="area">
        <option value="">请选择区</option>
    </select>
    <script>
        var province = document.getElementById("province");
        var city = document.getElementById("city");
        var area = document.getElementById("area");
        var xmlhttp=new XMLHttpRequest();
        xmlhttp.open("get","province.php?",true);
        xmlhttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
        xmlhttp.send(null);
        xmlhttp.onreadystatechange=function(){
            if(xmlhttp.readyState==4&&xmlhttp.status==200){
                var procinces = xmlhttp.responseText;
                var provincesArr=procinces.split(",");
                for(var i=0;i<provincesArr.length;i++){
                    var option=document.createElement("option");
                    province.appendChild(option);
                    option.innerHTML=provincesArr[i];
                }
            }
          } 
          //城市的ajax
          province.onchange=function(){
            //先删除上次的
            city.innerHTML="<option>--请选择城市--</option>"
            xmlhttp.open("post","city.php?",true);
            xmlhttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
            xmlhttp.send("provinceValue="+province.value);
            xmlhttp.onreadystatechange=function(){
            if(xmlhttp.readyState==4&&xmlhttp.status==200){
                var cities = xmlhttp.responseText;
                var citiesArr=cities.split(",");
                for(var i=0;i<citiesArr.length;i++){
                    var option=document.createElement("option");
                    city.appendChild(option);
                    option.innerHTML=citiesArr[i];
                }
            }
          }
        }
          //作业:省市区三级联动
          city.onchange=function(){
            area.innerHTML="<option>--请选择区--</option>"
            xmlhttp.open("post","area.php?",true);
            xmlhttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
            xmlhttp.send("cityValue="+city.value);
            xmlhttp.onreadystatechange=function(){
            if(xmlhttp.readyState==4&&xmlhttp.status==200){
                var areas  = xmlhttp.responseText;
                var areasArr=areas.split(",");
                for(var i=0;i<areasArr.length;i++){
                    var option=document.createElement("option");
                    area.appendChild(option);
                    option.innerHTML=areasArr[i];
                }
            }
          }
        }
    </script>
</body>
</html>

案例三: 基于高德地图的天气预报

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <h1>天气预报</h1>
    <h2 id="weather"></h2>
    <input id="city"/>
    <script>
        var city = document.getElementById("city");
        var weather = document.getElementById("weather");
        city.onblur=function(){
            var xml = new XMLHttpRequest();
            xml.open("get","https://restapi.amap.com/v3/weather/weatherInfo?key=fd9c5ecbfa5ac06307d83d39ca169884&city="+city.value+"&extensions=all",true);
            xml.send(null);
            xml.onreadystatechange=function(){
                if(xml.readyState==4&&xml.status==200){
                    var data1 = JSON.parse(xml.responseText);
                    if(data1.forecasts.length){
                        for(var i=0;i<data1.casts.length;i++){
                        weather.innerHTML=city.value+"日期是"+data1.casts[i].data+"白天天气是"+data1.casts[i].dayweather+"夜间天气是"+data1.casts[i].nightweather+"温度是"+data1+casts[i].daytemp;
                    }
                    }else{
                        weather.innerHTML="您所查询的城市暂无天气信息";
                    }
                }
            }
        }
    </script>
</body>
</html>