Ajax学习

作者: MrSong | 来源:发表于2018-05-22 08:33 被阅读15次

title: Ajax学习
notebook: 编程
tags:javascript


只会iOS已经不行了,要学习各种知识。

首先自己搭建一个模拟环境,使用Xampp即可

请求纯文本数据

  • 主要是简单使用,网络请求的流程,首先配置参数,其次设置回调方法,最后发起请求。
  • 使用 XMLHttpRequest
  • 比如说open方法,open(type,url/file,async)
    function loadText() {
        // console.log("hello world");
        var xml = new XMLHttpRequest();
        // console.log(xml)
        // open(type,url/file,async)
        // 配置请求数据
        xml.open('GET', 'sample.txt', true);

        // 接受请求
        // onload /onreadstatechange
        xml.onload = function() {
            console.log(this.responseText);
        }

        // xml.onreadystatechange = function() {
        //     console.log("readyState:"+this.readyState);
        //     console.log(this.responseText);
        // }

        // 发送请求
        xml.send();
    }
  • onloadonreadstatechange 的使用以及区别
// readyState 状态码
// 0 请求初始化
// 1 服务端连接已建立
// 2 请求已接收
// 3 请求处理中
// 4 请求已完成,且相应已就绪

// HTTP 状态码
// 200 服务器成功返回网页
// 404 请求的网页不存在
// 503 服务器暂时不可用
   function loadText() {
        // console.log("hello world");
        var xml = new XMLHttpRequest();
        // console.log(xml)
        // open(type,url/file,async)
        // 配置请求数据
        xml.open('GET', 'sample1.txt', true);
        console.log("readyState:" + xml.readyState);
        // 接受请求
        // onload /onreadstatechange
        xml.onload = function() {
            console.log("readyState:" + this.readyState);
            // console.log(this.responseText);
        }
        // 如果使用onload 但是想监听3,可以使用这个方法
        xml.onprogress = function() {
            console.log("11111readyState:" + this.readyState);
        }

        //     xml.onreadystatechange = function() {
        //         console.log("readyState:"+this.readyState);
        //         if(this.status == 200 && this.readyState == 4) {
        // console.log(this.responseText);
        //         }else if(this.status == 404) {
        //          console.log('网页不存在');
        //         }

        //     }
        // onload  经过 1 4
        // onreadystatechange 经过1 2 3 4 



        // 发送请求
        xml.send();
    }

请求json数据

  • 请求单个json数据
 // 请求单个json数据
    function clickuser() {
        var xml = new XMLHttpRequest();
        xml.open("GET", 'user.json', true);
        xml.onreadystatechange = function() {
            if (this.status == 200 && this.readyState == 4) {
                console.log(this.responseText);
                // json 格式数据需要进行转换才能使用
                var user = JSON.parse(this.responseText);
                console.log(user.name);
                // ES6语法
                //            var output = `
                // <ul>
                //  <li>${user.id}</li>
                //  <li>${user.name}</li>
                //  <li>${user.email}</li>
                // </ul>
                //      `;
                // js普通语法
                var output =
                    '<ul>' +
                    '<li>' + user.id + '</li>'+
                '<li>' + user.name + '</li>'+
                '<li>' + user.email + '</li>' +
                    '</ul>';

                document.getElementById("user").innerHTML = output;

            }

        }
        xml.send();
    }
  • 请求json数组数据
   // 请求多个json数据
    function clickusers() {
        var xml = new XMLHttpRequest();
        xml.open("GET", 'users.json', true);
        xml.onreadystatechange = function() {
            if (this.status == 200 && this.readyState == 4) {
                console.log(this.responseText);
                var users = JSON.parse(this.responseText);
                var output
                // ES6语法
                for (var i = 0; i < users.length - 1; i++) {

                    output += `
                <ul>
                    <li>${users[i].id}</li>
                    <li>${users[i].name}</li>
                    <li>${users[i].email}</li>
                </ul>
                        `;

                }
                document.getElementById("users").innerHTML = output;

            }

        }
        xml.send();
    }
  • 请求Github接口
//请求Github接口
    function clickButton() {
        var xml = new XMLHttpRequest();
        xml.open("get", "https://api.github.com/users", true);
        xml.onreadystatechange = function() {

            if (this.status == 200 && this.readyState == 4) {

                var users = JSON.parse(this.responseText);
                // console.log(users);
                var output = '';
                for (var i = 0; i < users.length; i++) {
                    output += `
                        <ul>
                            <li>id:${users[i].id}</li>
                            <li>login:${users[i].login}</li>
                        </ul>
                        `;
                }
                document.getElementById("users").innerHTML = output;
            }
        }
        xml.send();
    }
  • 请求php接口
  • 注意post请求要设置文件头并且传递参数
    • req.setRequestHeader("Content-type", "application/x-www-form-urlencoded")
<body>
    <button id="button">请求php接口</button>
    <div></div>
    <div id="users"></div>
    <p>get提交表单到PHP</p>
    <form action="procress.php" method="GET">
        <input type="text" name="name">
        <input type="submit" name="提交">
    </form>
    <p>get提交表单到AJAX</p>
    <form id="getForm">
        <input type="text" name="name" id='name'>
        <input type="submit" name="提交">
    </form>
    <br>
    <p>post提交表单到PHP</p>
    <form action="procress.php" method="post">
        <input type="text" name="name">
        <input type="submit" name="提交">
    </form>
    <p>post提交表单到AJAX</p>
    <form id="postForm">
        <input type="text" name="name" id='name2'>
        <input type="submit" name="提交">
    </form>
    <script type="text/javascript">
    document.getElementById("button").addEventListener("click", clickButton);
    document.getElementById("getForm").addEventListener("submit", getForm);
    document.getElementById("postForm").addEventListener("submit", postForm);
    // get  ajax可以不刷新界面获得数据
    function getForm(e) {
        e.preventDefault();
        var name = document.getElementById("name").value;
        var req = new XMLHttpRequest();
        req.open("GET", "procress.php?name=" + name, true);
        req.onload = function() {
            console.log(this.responseText);
        }
        req.send();
    }

    // post  ajax可以不刷新界面获得数据
    function postForm(e) {
        e.preventDefault();
        var name = document.getElementById("name2").value;
        var req = new XMLHttpRequest();
        var para = "name=" + name;
        req.open("post", "procress.php", true);
        // post需要设置文件头
        req.setRequestHeader("Content-type", "application/x-www-form-urlencoded")
        req.onload = function() {
            console.log(this.responseText);
        }
        req.send(para); // 传递参数
    }
    //请求php接口
    function clickButton() {
        var xml = new XMLHttpRequest();
        xml.open("get", "procress.php?name=xiaozhang", true);
        xml.onload = function() {
            console.log(this.responseText)
            //      if (this.status == 200 && this.readyState == 4) {

            //          var users = JSON.parse(this.responseText);
            //          // console.log(users);
            //          var output = '';
            //          for (var i = 0; i < users.length; i++) {
            //              output += `
            // <ul>
            // <li>id:${users[i].id}</li>
            // <li>login:${users[i].login}</li>
            // </ul>
            // `;
            //          }
            //          document.getElementById("users").innerHTML = output;
            //      }
        }
        xml.send();
    }
    </script>
</body>
PHP和AJAX接口请求区别.gif
  • 配置mysql,使用PHP访问数据库
  • 注意phpmyadmin的配置,需要相应的新建一个ajaxtest的数据库,并添加一个表users
<?php 
    #echo "hello php";
    if (isset($_GET['name'])) {// 相应get接口
        echo "GET:你的名字是".$_GET['name'];
    }
        // 链接数据库
    $conn = mysqli_connect('localhost','root','','ajaxtest');

    if (isset($_POST['name'])) {// 相应post接口
        // echo "post:你的名字是".$_POST['name'];
        // 将拿来的数据转换一下
        $name = mysqli_real_escape_string($conn,$_POST['name']);
        $query = "insert into users(name) values('$name')";

        if(mysqli_query($conn,$query)) {
            echo "添加数据库成功";
        }else {
            echo "添加数据库失败";
        }
    }
?>
  • post 参数配置
  • post和get都需要格式化参数
  //格式化参数,post和get都需要格式化参数
    function formatParams(data) {
        var arr = [];
        for (var name in data) {
            arr.push(encodeURIComponent(name) + "=" + encodeURIComponent(data[name]));
        }
        arr.push(("v=" + Math.random()).replace(".", ""));
        return arr.join("&");
    }
    function postInfo() {
        // var name = document.getElementById("name2").value;
        var req = new XMLHttpRequest();
     
        var para = { "userId": "1", "userPsw": "2", "content": '{"buscode":"MM_0000001","functype":"query","apptype":"3","pagesize":"20","curpage":"1","params":{"param1":"","param2":"440905500000","param3":"05002"}}'};

        req.open("post", "https://14.215.237.205:6082/frame/commonCollect.do?method=comBusQyery", true);

        // post需要设置文件头,这里一定要写成"application/x-www-form-urlencoded",不然服务端拿不到参数
        req.setRequestHeader("Content-type","application/x-www-form-urlencoded");
        
        console.log('post:' + formatParams(para));
    
        req.onreadystatechange = function() {
            console.log(req.readyState);
            if (req.readyState == 4 && req.status == 200) {
                console.log(req.responseText);
            }
        };
        req.send(formatParams(para)); // 传递参数
    }

总结

  • 总的来说,ajax的使用也不是很麻烦,熟悉了几个方法,就可以了。

相关文章

  • ajax学习笔记

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

  • 2018-11-06

    学习ajax

  • Python网络爬虫(三)

    AJAX学习 AJAX=Asynchronous JavaScript and XML(异步的 JavaScrip...

  • 2018-11-07

    继续学习Ajax

  • 2018-11-09

    ajax学习完毕

  • AJAX

    前端学习中,今天学习了blue老师视频里面的ajax,仅作为自己学习的记录 ajax(Asynchronous J...

  • HTML5学习小记二ajax,window.orientatio

    1.ajax的学习 HTML5中的ajax相当于iOS中的afnetworking;详见jQuery ajax -...

  • jQuery AJAX

    本节我们学习 AJAX,AJAX 是 Asynchronous Javascript And XML 的首字母缩写...

  • JavaWeb学习-Ajax-1-Ajax简介

    JavaWeb学习-Ajax-1-Ajax简介 进入到一个新的知识点的学习,这个知识点叫做Ajax,指的是异步的j...

  • Ajax学习

    title: Ajax学习notebook: 编程tags:javascript 只会iOS已经不行了,要学习各种...

网友评论

    本文标题:Ajax学习

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