AJAX中的GET和POST

作者: CNLISIYIII | 来源:发表于2019-05-09 17:54 被阅读0次

(一)Mac端配置自己的服务器

先上服务器:
https://pan.baidu.com/s/15-vPTsuLMmY87C7bh3YVHw
app-macos中内置了一些接口,比如 /time 。这些接口也必须通过IP或域名去请求。接口地址127.0.0.1:3000/xxx
创建一个纯英文目录,目录中放app-macos,再新建一个public文件夹(名字不可改,文件夹相当于服务器)。
直接打开文件会提示错误,所以用终端配置⬇️。

配置方法

1.打开终端,进入到app-macos文件所在文件夹(比如桌面)。

~ lisiyi$ cd /Users/lisiyi/Desktop/

此时直接运行会提示没有权限:

Desktop lisiyi$ ./app-macos
-bash: ./app-macos: Permission denied

2.给此文件夹全部权限。

Desktop lisiyi$ chmod -R 777 ./

3.把app-macos拖进终端运行。出现端口号就成功:

Desktop lisiyi$ /Users/lisiyi/Desktop/app-macos
开始监听:3000

4.在浏览器打开地址http://127.0.0.1:3000/01.html,能运行说明成功。
涉及到 AJAX 操作的页面不能使用文件协议访问(不能使用VSCode选择用浏览器打开,必须使用127.0.0.1:3000/xxx的方式访问)

(二)AJAX

open(请求方式,请求地址);
请求方式:GETPOST

代码举栗:

<script>
    // 实例化XMLHttpRequest对象
    var xhr = new XMLHttpRequest();
    // 请求设置信息
    xhr.open('GET','http://127.0.0.1:3000/time');
    // 发送请求
    xhr.send();
    // 请求响应过程结束,获取服务器响应的信息
    xhr.onload = function(){ //onload表示整个AJAX过程结束
        //使用responseText来接收服务器响应的数据
        document.getElementById('time').innerText = xhr.responseText;
    }
</script>

(三)GET方式的AJAX请求

1.get获取

一般用户从服务器获取数据。
open方法中的get不区分大小写。

代码举栗:

    <script>
        // 实例化XMLHttpRequest对象
        var xhr = new XMLHttpRequest();
        // xhr.open('GET', 'http://127.0.0.1:3000/time');
        // 简化URL,斜线不能删除
        xhr.open('GET','/time');
        // 发送请求
        xhr.send()
        // 请求响应过程结束后接收服务器返回的数据
        xhr.onload() = function() {
            // 通过 xhr 的 responseText 获取到响应的响应体
            console.log(xhr.responseText);
        };
    </script>

2.GET请求携带参数

什么时候需要带请求参数

  • 请求参数又叫做查询字符串
  • 一般用于告诉服务器此次请求的详细目的,比如查询什么、删除哪条记录等

URL携带查询字符串

  • 格式:http://www.baidu.com/s?q=word&sug=5017

  • 查询字符串(querystring):

    • URL中问号后面携带的就是 get 请求传参的数据,叫做查询字符串

    • 格式:q=word&sug=5017

    • 查询字符串只适合传输少量数据

代码举栗:

    <script>
        var xhr = new XMLHttpRequest();
        //请求参数
        xhr.open('GET','/query-get?id=123&name=张三&age=20');
        xhr.send()
        xhr.onload() = function() {
            console.log(xhr.responseText); //打印一个字符串,不是对象
        };
    </script>

(三)AJAX发送POST请求

把数据提交给服务器
post把传递的数据封装在 HTTP 请求数据中,以键/值的形式出现,可以传输大量数据,对数据量没有限制,也不会显示在 URL 中。

  • POST方式要设置head头。
  • post 请求,必须调用setRequestHeader方法设置 Content-Type
    • 请求头中的 Content-Type,告诉服务器发送过去的数据的格式
  • POST方式向服务器传递数据要放在send中。
    • send方法的参数就是post方式发送给服务器的数据。(和get不同)

query-post向服务器发送什么数据,服务器就返回什么数据。

代码举栗:

<body>
    <input type="button" id="btn" value="请求">
    <script>
        document.getElementById('btn').onclick = function () {
            var xhr = new XMLHttpRequest();
            xhr.open('POST', '/query-post');
            //设置head头
            xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
            //传递参数
            xhr.send('id=123&name=lisi&age=20');
            xhr.onload() = function () {
                console.log(xhr.responseText);
            };
        }
    </script>
</body>

验证用户名案例:

服务器接口:/checkUser 可以检测用户名是否可用
默认 zhangsan lisi wangwu被注册

<body>
    <input type="text" id="txt_name">
    <span id="msg"></span>
    <script>
        // 当输入框失去焦点的时候发送AJAX请求到 /checkUser
        document.getElementById('txt_name').onblur = function () {
            // 获取输入的内容
            var n = this.value;
            var xhr = new XMLHttpRequest();
            // 调用open方法设置请求方式和接口地址
            xhr.open('POST', '/checkUser');
            xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
            // 调用send方法发送请求
            xhr.send('username=' + n);
            // 请求响应过程结束,获取服务器返回的内容。根据返回的内容设置提示
            xhr.onload = function () {
                var result = xhr.responseText;
                // console.log(result);
                if (result == 'true') {
                    document.getElementById('msg').innerHTML = '已被注册';
                }
                else if (result == 'false') {
                    document.getElementById('msg').innerHTML = '可以注册';
                }
            }
        }
    </script>
</body>

(四)onload 和 onreadystatechange

在通过Ajax向服务器发送请求的过程中,XMLHttpRequest对象的状态会发生多次变化。由于 readystatechange 事件是在 xhr 对象状态变化时触发(不单是在得到响应时),也就意味着这个事件会被触发多次。

XMLHttpRequest对象的状态

有5种,用readyState属性来表示xhr对象的状态,值为0 1 2 3 4

image.png
创建完对象后马上输出状态,属性值为0。
属性值为4 表示DONE状态 响应体下载完成,可以直接使用responseText
onload事件只有属性值为4时才会触发

相关文章

网友评论

    本文标题:AJAX中的GET和POST

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