2019-08-16 AJAX 入門神碼

Ajax 1 - 請求純文本

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Ajax 1 - 請求純文本</title>
</head>
<body>
    <button id="button">請求純文本</button>
    <br><br>
    <div id="text"></div>
    <script>
        document.getElementById('button').addEventListener("click",loadText);
        function loadText(){
            // console.log("Hello World!");
            // 創建XMLHttpRequest對象
            var xhr = new XMLHttpRequest();
            // console.log(xhr);
            // open(type,url/file,async)
            xhr.open('GET','sample.txt',true);

            // console.log("READYSTATE: ",xhr.readyState);

            // onprogress
            xhr.onprogress = function(){
                // console.log("測試READYSTATE: ",xhr.readyState);
            }

            // 兩種方式請求 onload / onreadystattechange
            // xhr.onload = function(){
            //  // console.log("READYSTATE: ",xhr.readyState);
            //  // console.log(this.responseText);
            //  document.getElementById('text').innerHTML = this.responseText;
            // }

            xhr.onreadystatechange = function(){
                // console.log("READYSTATE: ",xhr.readyState);
                if (this.status == 200 && this.readyState == 4) {
                    // console.log(this.responseText);
                    document.getElementById('text').innerHTML = this.responseText;
                }else if(this.status == 404){
                    // console.log("請求的網頁不存在");
                    document.getElementById('text').innerHTML = "NOT Found";
                }
            } 

            // 發送請求
            xhr.send();
        }

        // readyState 狀態碼
        // 0: 請求未初始化
        // 1: 服務器連接已建立
        // 2: 請求已接收
        // 3: 請求處理中
        // 4: 請求已完成,且響應已就緒

        // HTTP 狀態碼
        // 200 - 服務器成功返回網頁
        // 404 - 請求的網頁不存在
        // 503 - 服務器暫時不可用

    </script>
</body>
</html>

Ajax 2 - 請求JSON數據

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Ajax 2 - 請求JSON數據</title>
</head>
<body>
    <button id="button1">請求單個用戶</button>
    <button id="button2">請求所有用戶</button>

    <br><br>

    <h1>單個用戶</h1>
    <div id="user"></div>

    <h1>所有用戶</h1>
    <div id="users"></div>

    <script>
        document.getElementById('button1').addEventListener('click',loadUser);
        document.getElementById('button2').addEventListener('click',loadUsers);

        function loadUser(){
            var xhr = new XMLHttpRequest();
            xhr.open("GET","user.json",true);
            xhr.onload = function(){
                if (this.status == 200) {
                    // console.log(this.responseText);
                    var user = JSON.parse(this.responseText);
                    // console.log(user.name);

                    var output = '';
                    output += 
                        '<ul>'+
                            '<li>'+user.id+'</li>'+
                            '<li>'+user.name+'</li>'+
                            '<li>'+user.email+'</li>'+
                        '</ul>';
                    ;
                    document.getElementById('user').innerHTML = output;
                }
            }

            xhr.send();
        }

        function loadUsers(){
            var xhr = new XMLHttpRequest();
            xhr.open("GET","users.json",true);
            xhr.onload = function(){
                if (this.status == 200) {
                    var users = JSON.parse(this.responseText);
                    var output = '';

                    // 遍歷數組
                    for(var i in users){
                        output += 
                            '<ul>'+
                                '<li>'+users[i].id+'</li>'+
                                '<li>'+users[i].name+'</li>'+
                                '<li>'+users[i].email+'</li>'+
                            '</ul>';
                        ;
                    }
                    document.getElementById('users').innerHTML = output;
                }
            }

            xhr.send();
        }

    </script>
</body>
</html>

Ajax 3 - 請求Github接口

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>3.請求Github接口</title>
    <style>
        .user{
            display: flex;
            background: #f4f4f4;
            padding: 10px;
            margin-bottom: 10px;
        }

        .user ul{
            list-style: none;
        }

    </style>
</head>
<body>
    <button id="button">請求Github接口</button>

    <br><br>

    <h1>所有Github的用戶信息</h1>

    <div id="users"></div>

    <script>
        document.getElementById('button').addEventListener('click',loadUsers);

        function loadUsers(){
            var xhr = new XMLHttpRequest();
            xhr.open("GET","https://api.github.com/users",true);

            xhr.onload = function(){
                var users = JSON.parse(this.responseText);
                // console.log(users);

                var output = '';

                for(var i in users){
                    output += `
                        <div class="user">
                            <img src="${users[i].avatar_url}" width="70" height="70" />
                            <ul>
                                <li>ID: ${users[i].id}</li>
                                <li>Login: ${users[i].login}</li>
                            </ul>
                        </div>
                    `;
                }
                document.getElementById('users').innerHTML = output;

            }

            xhr.send();
        }

    </script>
</body>
</html>

Ajax 4 - 請求PHP接口

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Ajax 4 - 請求PHP接口</title>
</head>
<body>
    <button id="button">獲取PHP數據</button>

    <br><br>

    <h1>正常表單GET提交數據到PHP</h1>
    <form action="process.php" method="GET">
        <input type="text" name="name">
        <input type="submit" value="提交">
    </form>

    <h1>Ajax請求數據GET</h1>
    <form id="getForm">
        <input type="text" name="name" id="name1">
        <input type="submit" value="提交">
    </form>

    <h1>正常表單POST提交數據到PHP</h1>
    <form action="process.php" method="POST">
        <input type="text" name="name">
        <input type="submit" value="提交">
    </form>

    <h1>Ajax請求數據POST</h1>
    <form id="postForm">
        <input type="text" name="name" id="name2">
        <input type="submit" value="提交">
    </form>

    <script>
        document.getElementById('button').addEventListener('click',getData);
        document.getElementById('getForm').addEventListener('submit',getForm);
        document.getElementById('postForm').addEventListener('submit',postForm);

        function getData(){
            var xhr = new XMLHttpRequest();
            xhr.open('GET',"process.php?name=Henry",true);
            xhr.onload = function(){
                console.log(this.responseText);
            }
            xhr.send();
        }   

        function getForm(e){
            e.preventDefault();
            var name = document.getElementById('name1').value;
            var xhr = new XMLHttpRequest();
            xhr.open('GET',"process.php?name="+name,true);
            xhr.onload = function(){
                console.log(this.responseText);
            }
            xhr.send();
        }   

        function postForm(e){
            e.preventDefault();
            var name = document.getElementById('name2').value;
            var params = "name="+name;
            var xhr = new XMLHttpRequest();
            xhr.open('POST',"process.php",true);
            // 設置請求頭
            xhr.setRequestHeader('Content-type','application/x-www-form-urlencoded');
            xhr.onload = function(){
                console.log(this.responseText);
            }
            xhr.send(params);
        }   
    </script>
</body>
</html>

Ajax 5 - 請求PHP數據

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Ajax 5 - 請求PHP數據</title>
</head>
<body>
    <button id="button2">請求所有用戶</button>
    <br><br>
    <h1>所有用戶</h1>
    <div id="users"></div>

    <script>
        document.getElementById('button2').addEventListener('click',loadUsers);
        function loadUsers(){
            var xhr = new XMLHttpRequest();
            xhr.open("GET","users.php",true);
            xhr.onload = function(){
                if (this.status == 200) {
                    var users = JSON.parse(this.responseText);
                    var output = '';

                    // 遍歷數組
                    for(var i in users){
                        output += 
                            '<ul>'+
                                '<li>'+users[i].id+'</li>'+
                                '<li>'+users[i].name+'</li>'+
                            '</ul>';
                        ;
                    }
                    document.getElementById('users').innerHTML = output;
                }
            }

            xhr.send();
        }

    </script>
</body>
</html>

php文件-user.php

<?php 

    $conn = mysqli_connect("localhost","root","","ajaxtest");

    $query = 'SELECT * FROM users';

    $result = mysqli_query($conn,$query);

    $users = mysqli_fetch_all($result,MYSQLI_ASSOC);

    echo json_encode($users);
 ?>

php文件-process.php

<?php 
    # echo "Hello World!";

    if (isset($_GET['name'])) {
        echo "GET: 你的名字是". $_GET['name'];
    }

    # 連接數據庫
    $conn = mysqli_connect("localhost","root",'','ajaxtest');

    if (isset($_POST['name'])) {
        // echo "POST: 你的名字是". $_POST['name'];

        # 將拿到的數據轉化一下
        $name = mysqli_real_escape_string($conn,$_POST['name']);

        $query = "INSERT INTO users(name) VALUES('$name')";
        mysqli_query($conn,"set name utf8");
        if(mysqli_query($conn,$query)){
            echo '用戶添加成功!';
        }else{
            echo "用戶添加失敗!".mysqli_error($conn);
        }
    }
?>

json文件-user.json

{
    "id":1,
    "name":"henry",
    "email":"henry@gmail.com"
}

json文件-users.json

[
    {
        "id":1,
        "name":"Henry",
        "email":"henry@gmail.com"
    },
    {
        "id":2,
        "name":"Bucky",
        "email":"bucky@gmail.com"
    },
    {
        "id":3,
        "name":"Hemiah",
        "email":"27732357@qq.com"
    }
]
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容