专栏名称: Merbng
程序员耶
目录
相关文章推荐
壹心理  ·  活得通透的人,都有一个共性:不讨好 ·  14 小时前  
元素和同位素地球化学  ·  《人类简史》人性的底层逻辑及其与文明发展的悖论 ·  16 小时前  
元素和同位素地球化学  ·  《人类简史》人性的底层逻辑及其与文明发展的悖论 ·  16 小时前  
简单心理  ·  DeepSeek好像在塑造一种新型依恋关系 ·  3 天前  
51好读  ›  专栏  ›  Merbng

AJAX学习:GET请求、POST请求、同步/异步

Merbng  · 简书  ·  · 2019-05-10 16:01

正文

遵循HTTP协议

  • 本质上XMLHTTPRequest就是JavaScript在web平台中发送HTTP请求的手段,所以我们发送出去的请求仍然是HTTP请求,同样符合HTTP约定的格式。
    var xhr = new XMLHttpRequest();
    xhr.open("POST", "./add.php");//设置请求行
    xhr.setRequestHeader('Foo', 'Bar');//设置一个请求头

    // xhr.setRequestHeader('Content-Type', 'application/x-www-from-urlencoded');
    xhr.setRequestHeader('Content-Type', 'application/json');
    // xhr.send('key1=value1&key2=value2');//以urlencode方式设置请求体
    xhr.send('{"foo":"123"}');//以urlencoded格式设置请求体

onload

var xhr = new XMLHttpRequest();
    xhr.open('GET', "time.php");
    xhr.send(null);
    //不考虑兼容可以这么写,readyState的状态一直是4
    //onload是Html5 中提供的 XMLHttpReuqest version 2.0 定义的
    xhr.onload = function () {
        console.log(this.responseText);
        console.log(this.readyState);
    }

AJAX发送GET请求并传递参数

  • 通常在一次GET请求过程中,参数传递都是通过URL地址中的?参数传递。
 var listElement = document.getElementById('list');
    //发送请求获取列表数据呈现在页面
    var xhr = new XMLHttpRequest();
    xhr.open('GET', 'users.php');
    xhr.send();
    xhr.onreadystatechange = function () {
        if (this.readyState !== 4) return;
        var data = JSON.parse(this.responseText);
        for (i = 0; i < data.length; i++) {
            var liElement = document.createElement('li');
            liElement.innerHTML = data[i].name;
            liElement.id = data[i].id;
            liElement.appendChild(liElement);
            listElement.append(liElement);
            liElement.addEventListener("click", function () {
                // 通过AJAX操作获取服务器对应数据的信息
                var xhr1 = new XMLHttpRequest();
                xhr1.open('GET', 'users.php?id=' + this.id);
                xhr1.send();
                xhr1.onreadystatechange = function () {
                    if (this.readyState !== 4) return;
                    var obj = JSON.parse(this.responseText);
                    alert(obj.age);
                }
            })
        }
    }

AJAX发送POST请求

  • POST请求过程中,都是采用请求体承载需要提交的数据。
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        #loading {
            display: none;
            position: fixed;
            top: 0;
            left: 0;
            right: 0;
            bottom: 0;
            background-color: #555;
            opacity: .5;
            text-align: center;
            line-height: 300px;
        }

        #loading::after {
            content: '加载中...';
            color: #ff4c60;
        }
    </style>

</head>
<body>
<div id="loading"></div>
<table border="1">
    <tr>
        <td>用户名</td>
        <td><input type="text" id="username"></td>
    </tr>
    <tr>
        <td>密码</td>
        <td><input type="password" id="password"></td>
    </tr>
    <tr>
        <td></td>
        <td>
            <button id="btn">登录</button>
        </td>
    </tr>
</table>
<script>
    var btn = document.getElementById('btn');
    //    获取界面上的元素value
    var txtUserName = document.getElementById('username');
    var txtPassword = document.getElementById('password');
    var loading = document.getElementById('loading');
    btn.onclick = function () {
        loading.style.display = 'block';
        var userName = txtUserName.value;
        var userPassword = txtPassword.value;
        //    通过XHR发生一个POST请求
        var xhr = new XMLHttpRequest();
        xhr.open('POST', 'login.php');
        //如果请求体是urlencoded格式,必须设置这个请求头
        xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
        xhr.send(`username=${userName}&password=${userPassword}`);
        //    根据服务端的反馈,做出界面提示
        xhr.onreadystatechange = function () {
            if (this.readyState !== 4) return;
            console.log(this.responseText);
            loading.style.display = 'none';
        }
    }
</script>
</body>
</html>

AJAX 请求 XML 格式的数据

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<script>
    var xhr = new XMLHttpRequest();
    xhr.open('GET', 'xml.php');
    xhr.send();
    xhr.onreadystatechange = function () {
        if (this.readyState !== 4) return;
        console.log(this.responseXML);
        console.log(this.responseXML.documentElement.children[0].innerHTML);
        console.log(this.responseXML.documentElement.getElementsByTagName('name')[0]);
    }
</script>
</body>
</html>

同步异步







请到「今天看啥」查看全文