原生js实现ajax方法(超简单)

下面是“原生js实现ajax方法(超简单)”的完整攻略。

步骤1:创建XMLHttpRequest对象

在JavaScript中要使用Ajax发送HTTP请求,必须先创建一个XMLHttpRequest对象。该对象提供了向Web服务器发送请求和接收响应的方法。

创建XMLHttpRequest对象:

let xmlhttp;
if (window.XMLHttpRequest){
    // code for IE7+, Firefox, Chrome, Opera, Safari
    xmlhttp=new XMLHttpRequest();
}else{
    // code for IE6, IE5
    xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}

步骤2:设置请求参数

在发送Ajax请求之前,要设置请求参数和响应方式。

设置请求参数:

xmlhttp.open("GET","/ajax/test1.txt",true);
xmlhttp.send();

如果是POST请求,则需要设置请求头Content-Type和请求体数据:

xmlhttp.open("POST","/ajax/test1.txt",true);
xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
xmlhttp.send("name=John&age=18");

步骤3:处理响应结果

当Ajax请求发送后,服务器响应会触发xmlhttp对象的readystatechange事件。我们可以通过该事件来处理服务器返回的响应数据。

完整的Ajax请求:

let xmlhttp;
if (window.XMLHttpRequest){
    // code for IE7+, Firefox, Chrome, Opera, Safari
    xmlhttp=new XMLHttpRequest();
}else{
    // code for IE6, IE5
    xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}

xmlhttp.onreadystatechange=function(){
    if (xmlhttp.readyState==4 && xmlhttp.status==200){
        document.getElementById("myDiv").innerHTML=xmlhttp.responseText;
    }
}

xmlhttp.open("GET","/ajax/test1.txt",true);
xmlhttp.send();

以上代码会将服务器返回的响应数据放入id为“myDiv”的元素中。

另外,Ajax请求是异步的,即浏览器不会等待服务器响应即可继续执行后面的代码。

示例1:Ajax请求获取JSON数据

以下示例通过Ajax请求获取JSON数据并将其渲染到页面上。

HTML代码:

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>Ajax请求获取JSON数据</title>
</head>
<body>
    <ul id="users"></ul>
    <script src="ajax.js"></script>
</body>
</html>

Ajax代码:

let xmlhttp;
if (window.XMLHttpRequest){
    // code for IE7+, Firefox, Chrome, Opera, Safari
    xmlhttp=new XMLHttpRequest();
}else{
    // code for IE6, IE5
    xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}

xmlhttp.onreadystatechange=function(){
    if (xmlhttp.readyState==4 && xmlhttp.status==200){
        let users = JSON.parse(xmlhttp.responseText);
        let html = '';
        for (let i = 0; i < users.length; i++) {
            let user = users[i];
            html += '<li>' + user.name + ': ' + user.age + '</li>';
        }
        document.getElementById('users').innerHTML = html;
    }
}

xmlhttp.open('GET', 'users.json', true);
xmlhttp.send();

示例2:Ajax提交表单数据

以下示例通过Ajax提交表单数据,实现无刷新提交,并将服务器返回的结果渲染到页面上。

HTML代码:

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>Ajax提交表单数据</title>
</head>
<body>
    <form id="myForm">
        <input type="text" name="username" placeholder="请输入用户名">
        <input type="password" name="password" placeholder="请输入密码">
        <button type="submit">登录</button>
    </form>
    <div id="result"></div>
    <script src="ajax.js"></script>
</body>
</html>

Ajax代码:

let form = document.getElementById('myForm');
form.addEventListener('submit', function(e){
    e.preventDefault();
    let xhr = new XMLHttpRequest();
    xhr.onreadystatechange = function() {
        if (xhr.readyState == 4 && xhr.status == 200) {
            document.getElementById('result').innerHTML = xhr.responseText;
        }
    };
    xhr.open('POST', 'login.php', true);
    xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
    let data = new FormData(form);
    let params = [];
    for (let pair of data.entries()) {
        params.push(pair[0] + '=' + pair[1]);
    }
    xhr.send(params.join('&'));
});

注意事项:

  1. 使用Ajax请求时,需要设置请求头Content-Type和请求体数据,如果不设置Content-Type,浏览器会默认设置为application/x-www-form-urlencoded,导致Server端无法解析接收数据。而formData的数据格式并不是经典的key-value格式,而是multipart/Form-data格式,针对这种数据格式,php有处理函数。
$_POST = array(
    'username' => 'John',
    'password' => '123456'
);
  1. new FormData()方法允许我们把javascript的key-value对象转化为FormData对象,这个对象可以直接以post请求方式发送数据,不需要使用上文的方法把参数通过&拼接在url后传输。

好了,以上就是“原生js实现ajax方法(超简单)”的完整攻略,希望对你有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:原生js实现ajax方法(超简单) - Python技术站

(0)
上一篇 2023年5月27日
下一篇 2023年5月27日

相关文章

  • JavaScript自学笔记(必看篇)

    JavaScript自学笔记(必看篇)攻略 1. 基本语法 JavaScript作为一门脚本语言,语法相对灵活,但是也需要遵循一定的规范。想要快速上手JavaScript,我们需要先掌握以下几个基本概念: 变量定义和赋值 数据类型 运算符 条件语句和循环语句 举个例子,我们可以通过以下代码来定义一个变量并给它赋值: var name = "张三&q…

    JavaScript 2023年5月27日
    00
  • JS中的for in和for of

    在JavaScript中, for…in 和 for…of 都是用于迭代循环的结构:   1. for…in 循环: for…in 循环主要用于遍历对象的可枚举属性。这种循环不仅遍历对象自身的属性,还会遍历原型链上的可枚举属性。它的语法如下: for (variable in object) { // 执行的代码 } 其中 variable …

    JavaScript 2023年4月20日
    00
  • JavaScript闭包原理与用法实例分析

    JavaScript闭包原理与用法实例分析 什么是闭包 在javascript中,闭包是一个比较基础的概念。它能够让我们可以轻松地实现许多常见的编码模式,比如惰性加载、模块化、私有变量等等。闭包是指有权访问另一个函数作用域内变量的函数。 闭包的原理 闭包创建时,外部函数已经执行完毕,但内部函数仍然可以访问外部函数的变量。因为当一个函数被执行完毕后,它的作用域…

    JavaScript 2023年6月10日
    00
  • js中时间格式化的几种方法

    讲解js中时间格式化的几种方法的攻略如下: 一、JavaScript中的时间表示 在JavaScript中,时间是用毫秒数来表示的。毫秒数是从1970年1月1日00:00:00 UTC开始计算的,也被称为1970年纪元。这个时间点被称为UNIX时间。UNIX时间是一个标准时间,所有的计算机系统都使用它来存储时间数据。 二、格式化时间的方法 在JavaScri…

    JavaScript 2023年5月27日
    00
  • JavaScript内核之基本概念

    关于“JavaScript内核之基本概念”的完整攻略,可以从以下几个方面来讲解。 1. 什么是JavaScript内核? JavaScript是一种高级编程语言,但是它需要在浏览器上执行,因此需要JavaScript引擎来解析和执行JavaScript代码。JavaScript引擎是JavaScript内核的核心组成部分,它是一种解释器或编译器,可以将Jav…

    JavaScript 2023年5月18日
    00
  • 复制js对象方法(详解)

    复制JS对象是很常见的操作,但是需要注意的是,在JS中,对象是引用类型,因此直接复制对象会导致对象引用被复制,而不是对象本身。这里介绍几种复制JS对象的方法,包括深拷贝和浅拷贝。 浅拷贝 浅拷贝可以简单地理解为将对象的属性复制一份到新的对象中,但是属性值为对象的属性仍然是引用关系。 表达式“{…obj}” ES6中引入了表达式“{…obj}”,可以用…

    JavaScript 2023年5月27日
    00
  • javascript保留两位小数的实现方法你了解吗

    当需要在JavaScript中将一个数字保留两位小数时,通常有几种不同的方法可以实现。 方法一:使用toFixed()函数 .toFixed()函数是JavaScript中的内置函数,可以将数字转换为带有指定小数位数的字符串格式。 const num = 3.141592654; const roundedNum = num.toFixed(2); cons…

    JavaScript 2023年5月28日
    00
  • Javascript Math random() 方法

    JavaScript中的Math.random()方法是用于生成一个0到1之间的随机数的函数。以下是关于Math.random()方法的完整攻略,包含两个示例。 JavaScript Math对象的random方法 JavaScript Math的random()方法用于生成一个0到1之间的随机数。下面是random()方法的语法: Math.random(…

    JavaScript 2023年5月11日
    00
合作推广
合作推广
分享本页
返回顶部