AJAX基础学习

Posted 在路上的小阿亮

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了AJAX基础学习相关的知识,希望对你有一定的参考价值。

先写一下我从网上看到的描述:

AJAX = Asynchronous javascript and XML(异步的 JavaScript 和 XML)。AJAX 不是新的编程语言,而是一种使用现有标准的新方法。AJAX 是与服务器交换数据并更新部分网页的艺术,在不重新加载整个页面的情况下。


Ajax 的核心是 JavaScript 对象 XMLHttpRequest。该对象在 Internet Explorer 5 中首次引入,它是一种支持异步请求的技术。简而言之,XMLHttpRequest使您可以使用 JavaScript 向服务器提出请求并处理响应,而不阻塞用户。


XMLHttpRequest 是 AJAX 的基础。

 XMLHttpRequest 术语缩写为XHR,中文可以解释为可扩展超文本传输请求。

 XMLHttpRequest 对象可以在不向服务器提交整个页面的情况下,实现局部更新网页。

 XMLHttpRequest的对象用于客户端和服务器之间的异步通信。

 它执行以下操作:

  1. 在后台从客户端发送数据

  2. 从服务器接收数据

  3. 更新网页而不重新加载。


    XMLHttpRequest对象的属性

    XMLHttpRequest对象的常见属性如下:

属性 描述
onreadystatechange

存储函数(或函数名),每当readyState的属性改变时,

就会调用该函数。

readyState 存有的XMLHttpRequest的状态从0到4发生变化。
0:请求未初始化
1:服务器连接已建立
2:请求已接收
3:请求处理中
4:请求已完成,且响应已就绪
responseText 以文本形式返回响应。
responseXML 以XML格式返回响应
status
将状态返回为数字(例如,“Not Found”为404,“OK”为200)
statusText
以字符串形式返回状态(例如,“Not Found”或“OK”)


XMLHttpRequest对象的方法

XMLHttpRequest对象的重要方法如下:

方法 描述
abort()
取消当前请求
getAllResponseHeaders()
以字符串形式返回完整的HTTP标头集
getResponseHeader( headerName )
返回指定HTTP标头的值
void open(method,URL) 打开指定获取或交的方法和URL的请求。
void open(method,URL,async) 与上面相同,但指定异步或不。
void open(method,URL,async
userNamepassword
与上面相同,但指定用户名和密码。
void send(content) 发送获取请求。
setRequestHeader( labelvalue
将标签/值对添加到要发送的HTTP标头。

AJAX 使用的 XMLHttpRequest 的对象与服务器通信。让我们尝试通过下面显示的图像了解 AJAX 的流程或 AJAX 的工作原理。

向服务器发送请求


 XMLHttpRequest 对象用于和服务器交换数据。

 当你的页面全部加载完毕后,客户端会通过 XMLHttpRequest 对象向服务器请求数据,服务器端接受数据并处理后,向客户端反馈数据。

 如需将请求发送到服务器,我们使用 XMLHttpRequest 对象的open()send()方法:

xmlhttp.open("GET","ajax_info.txt",true);        
xmlhttp.send();


方法 描述
open(method,url,async)

规定请求的类型、URL 以及是否异步处理请求。

  • method:请求的类型;GET 或 POST

  • url:文件在服务器上的位置

  • async:true(异步)或 false(同步)

send(string)

将请求发送到服务器。

  • string:仅用于 POST 请求

方法 描述
setRequestHeader(header,value)

向请求添加 HTTP 头。

  • header: 规定头的名称

  • value: 规定头的值

 提示:POST请求的特点如下:

  • POST请求不会被缓存

  • POST请求不会保留在浏览器历史记录中

  • POST请求不能被收藏为书签

  • POST请求对数据长度没有要求

url - 服务器上的文件


xmlhttp.open("GET","ajax_test.html",true);

 该文件可以是任何类型的文件,比如.txt.xml,或者服务器脚本文件,比如.asp.php(在传回响应之前,能够在服务器上执行任务)。


异步 - True 或 False?


 AJAX 指的是异步 JavaScript 和 XML(Asynchronous JavaScript and XML)。

 XMLHttpRequest 对象如果要用于 AJAX 的话,其open()方法的sync(async)参数必须设置为 true:

xmlhttp.open("GET","ajax_test.html",true);

 对于 web 开发人员来说,发送异步请求是一个巨大的进步。很多在服务器执行的任务都相当费时。AJAX 出现之前,这可能会引起应用程序挂起或停止。

 通过 AJAXJavaScript 无需等待服务器的响应,而是:

  • 在等待服务器响应时执行其他脚本

当响应就绪后对响应进行处理


下面是学习的一个小demo


页面上实时输入信息,存储到服务器上,同时显示在页面上。


  • 服务器使用Apache2.4.39

  • 数据库mysql5.7.26

  • 环境集成软件 小皮


贴上html代码:

<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>聊天室</title> <style> div { width:500px; height:500px; background-color:#dedede; }</style><script src="index.js"></script></head><body><div id="con">
</div><form action="" method=""> <input type="text" name="username" size="10" id="uname"> <input type="text" size="50" id="content"> <input type="button" value="发送" id="btn"></form></body></html>

js代码:


document.write(new Date());    //ajax模板请求语法 function createXMLHttpRequest() { var request = false; if(window.XMLHttpRequest) { request = new XMLHttpRequest(); if(request.overrideMimeType) { request.overrideMimeType('text/xml'); } } else if(window.ActiveXObject) { var versions = ['Microsoft.XMLHTTP', 'MSXML.XMLHTTP', 'Microsoft.XMLHTTP', 'Msxml2.XMLHTTP.7.0', 'Msxml2.XMLHTTP.6.0', 'Msxml2.XMLHTTP.5.0', 'Msxml2.XMLHTTP.4.0', 'MSXML2.XMLHTTP.3.0', 'MSXML2.XMLHTTP']; for(var i=0; i<versions.length; i++) { try { request = new ActiveXObject(versions[i]); if(request) { return request; } } catch(e) { request=false; } } } return request; }
document.write('<br>'); //需要将获取对象放到事件中, 重新获取Ajax对象, 不至于有缓存。 window.onload=function(){ var btn = document.getElementById("btn");
btn.onclick=function(){ var ajax = createXMLHttpRequest();
var unameobj = document.getElementById("uname"); var uname = unameobj.value;
var contentobj = document.getElementById("content"); var content = contentobj.value; contentobj.value='';
var mess="username="+uname+"&"+"content="+content;
// alert(mess); //post请求 ajax.open("post", "http://localhost/write.php", true); ajax.setRequestHeader("Content-Type", 'application/x-www-form-urlencoded'); ajax.send(mess); }
function getMess() { setInterval(function(){ var ajax = createXMLHttpRequest(); ajax.open("get", "http://localhost/read.php", true); ajax.send(null); ajax.onreadystatechange=function(){ // alert("服务器有返回的动作"); // console.log(ajax.readyState); if(ajax.readyState==4) { // alert('只执行一次'); //console.log(ajax.status); //console.log(ajax.statusText); if(ajax.status==200) { document.getElementById("con").innerHTML=ajax.responseText; // alert(ajax.responseText); } } } },2000);        }        getMess();    }

后台请求

ajax.open("post", "http://localhost/write.php", true);

write.php

 <?php $username = $_POST["username"]; $content = $_POST["content"];
$str = "<b>{$username}</b>(".date("Y/m/d H:i:s").")说: {$content}<br>";
file_put_contents("message.txt", $str, FILE_APPEND); ?>

后台请求

ajax.open("get", "http://localhost/read.php", true);

read.php

<?phpecho file_get_contents("message.txt");?>


以上是关于AJAX基础学习的主要内容,如果未能解决你的问题,请参考以下文章

[vscode]--HTML代码片段(基础版,reactvuejquery)

AJAX相关JS代码片段和部分浏览器模型

201555332盛照宗—网络对抗实验1—逆向与bof基础

Javascript代码片段在drupal中不起作用

Ajax全面基础学习

DOM探索之基础详解——学习笔记