AJAX学习笔记(四、请求与响应)

简介: AJAX学习笔记(四、请求与响应)

向服务器发送请求

工作原理:

image.png

AJAX与后台的交互可以分为以下几步:

1、用户从前端发送请求,JavaScript中调用XMLHttpRequest对象。

2、HTTP请求由XMLHttpRequest对象发送到服务器。

3、服务器使用JAVA,PHP,ASP.net等与数据库交互。检索数据。

4、服务器将XML数据或JSON数据发送到XMLHttpRequest回调函数。HTML和CSS数据显示在浏览器上。

向服务器发送请求

AJAX向服务器发送请求主要使用XMLHttpRequest 对象的 open() 和 send() 方法:

方法 描述
open(method,url,async) 规定请求的类型、URL 以及是否异步处理请求。
method:请求的类型;GET 或 POST
url:文件在服务器上的位置
async:true(异步)或 false(同步)
send(string) 将请求发送到服务器。
string:仅用于 POST 请求

Get与Post

GET请求特点:

.GET请求可被缓存

.GET请求保留在浏览器历史记录中

.GET请求可被收藏为书签

.GET请求不应在处理敏感数据时使用

.GET请求有长度限制

.GET请求只应当用于取回数据

Post请求特点

.POST请求不会被缓存

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

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

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

如果需要像 HTML 表单那样 POST 数据,应当使用setRequestHeader()来添加 HTTP 头。然后在send()方法中规定希望发送的数据:

xmlhttp.open("POST","ajax_test.html",true); 
xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded"); 
xmlhttp.send("fname=Henry&lname=Ford");
对比

与 POST 相比,GET 更简单也更快,并且在大部分情况下都能用。

然而,在以下情况中,请使用 POST 请求:

.无法使用缓存文件(更新服务器上的文件或数据库)

.向服务器发送大量数据(POST 没有数据量限制)

.发送包含未知字符的用户输入时,POST 比 GET 更稳定也更可靠

url

open() 方法的 url 参数是服务器上文件的地址

异步

Async=true,异步。

Async=false,不异步。

异步是一个巨大的进步,一般情况下都会选择异步。

响应

AJAX - 服务器响应

如需获得来自服务器的响应,需要使用 XMLHttpRequest 对象的 responseText 或 responseXML 属性。

属性 描述
responseText 获得字符串形式的响应数据。
responseXML 获得 XML 形式的响应数据。
responseText属性:

如果来自服务器的响应并非 XML,使用 responseText 属性:

document.getElementById("myDiv").innerHTML=xmlhttp.responseText;
responseXML属性:

如果来自服务器的响应是 XML,而且需要作为 XML 对象进行解析,请使用 responseXML 属性:

xmlDoc=xmlhttp.responseXML;
txt="";
x=xmlDoc.getElementsByTagName("ARTIST");
for (i=0;i<x.length;i++)
{
    txt=txt + x[i].childNodes[0].nodeValue + "<br>";
}
document.getElementById("myDiv").innerHTML=txt;

jsp后端实例

做一个简单的实例,后端就用jsp。

check.html

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>猜姓名</title>
<style type="text/css">
</style>
</head>
<body>
   <div id="container">
      <span>猜猜我的名字 :</span>
      <input id="name" name="name" onkeyup="check()" type="text">    <!-- 设置keyup事件为后端请求函数 -->
      <span id="checkResult"></span>
   </div>
   <script type="text/javascript">      
        //创建XMLHttpRequest对象
        var xmlhttp;
        if (window.XMLHttpRequest) {
          //  IE7+, Firefox, Chrome, Opera, Safari 浏览器执行代码
          xmlhttp = new XMLHttpRequest();
        } else {
          // IE6, IE5 浏览器执行代码
          xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
        }
        function check(){                            //向后端请求函数
            var name = document.getElementById("name").value;
            var url = "http://localhost:8080/AjaxDemo/checkResult.jsp?name="+name;       //通过GET方法发送信息,得向 URL 添加信息            
            xmlhttp.onreadystatechange=checkResult; //响应函数
            xmlhttp.open("GET",url,true);   //设置访问的页面
            xmlhttp.send(null);  //执行访问
                                         //null表示没有参数,因为参数已经通过“GET" 方式,放在url里了。
                                         //只有在用"POST",并且需要发送参数的时候,才会使用到send。
          }
        function checkResult(){         //处理响应函数
            if (xmlhttp.readyState==4 && xmlhttp.status==200)  //请求已完成,响应已就绪且状态"OK"
               document.getElementById('checkResult').innerHTML=xmlhttp.responseText;                  //获得字符串形式的响应数据,给span块赋值
          }
      </script>
</body>
</html>

checkResult.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>检查结果</title>
</head>
<body>
   <%
    String name = request.getParameter("name");
    if("Sandy".equalsIgnoreCase(name))
       out.print("<font color='green'>恭喜你猜对了</font>");
   else
       out.print("<font color='red'>加油,就快对了</font>");
   %>
</html>

在tomcat上跑一下,

image.png

参考:

1、https://www.w3cschool.cn/ajax/ajax-xmlhttprequest-send.html

2、https://www.w3cschool.cn/ajax/ajax-xmlhttprequest-response.html

3、https://www.runoob.com/ajax/ajax-xmlhttprequest-send.html

4、http://how2j.cn/k/ajax/ajax-stepbystep/466.html#nowhere

5、https://www.runoob.com/ajax/ajax-xmlhttprequest-response.html

目录
相关文章
|
3月前
|
JSON 前端开发 数据库连接
AJAX响应状态
【10月更文挑战第29天】了解和正确处理各种AJAX响应状态码是开发高效、稳定的Web应用程序的重要环节。通过对不同状态码的判断和相应处理,可以为用户提供更好的交互体验,确保应用程序在各种情况下都能正确地响应用户的操作。
|
3月前
|
XML 前端开发 JavaScript
|
2月前
|
JSON 前端开发 JavaScript
Python中如何判断是否为AJAX请求
AJAX请求是Web开发中常见的异步数据交互方式,允许不重新加载页面即与服务器通信。在Python的Django和Flask框架中,判断AJAX请求可通过检查请求头中的`X-Requested-With`字段实现。Django提供`request.is_ajax()`方法,Flask则需手动检查该头部。本文详解这两种框架的实现方法,并附带代码示例,涵盖安全性、兼容性、调试及前端配合等内容,帮助开发者提升Web应用性能与用户体验。
54 0
|
4月前
|
JSON JavaScript 前端开发
《进阶篇第6章:vue中的ajax》包括回顾发送ajax请求方式、vue-cli脚手架配置代理服务器、vue-resource
《进阶篇第6章:vue中的ajax》包括回顾发送ajax请求方式、vue-cli脚手架配置代理服务器、vue-resource
86 22
|
4月前
|
前端开发 JavaScript
回顾前端页面发送ajax请求方式
回顾前端页面发送ajax请求方式
60 18
|
4月前
|
前端开发 JavaScript Java
第6章:Vue中的ajax(包含:回顾发送ajax请求方式、vue-cli脚手架配置代理服务器)
第6章:Vue中的ajax(包含:回顾发送ajax请求方式、vue-cli脚手架配置代理服务器)
132 4
|
4月前
|
前端开发 JavaScript 数据处理
JQuery 拦截请求 | Ajax 请求拦截
【10月更文挑战第4天】
193 1
|
5月前
|
前端开发
React技术栈-react使用的Ajax请求库用户搜索案例
这篇文章展示了一个React技术栈中使用Ajax请求库(如axios)进行用户搜索的实战案例,包括React组件的结构、状态管理以及如何通过Ajax请求获取并展示GitHub用户数据。
47 7
React技术栈-react使用的Ajax请求库用户搜索案例
|
5月前
|
JSON JavaScript 前端开发
Jquery常用操作汇总,dom操作,ajax请求
本文汇总了jQuery的一些常用操作,包括DOM元素的选择、添加、移除,表单操作,以及如何使用jQuery发送Ajax请求,涵盖了GET、POST请求和文件上传等常见场景。
|
5月前
|
JSON 资源调度 JavaScript
Vue框架中Ajax请求的实现方式:使用axios库或fetch API
选择 `axios`还是 `fetch`取决于项目需求和个人偏好。`axios`提供了更丰富的API和更灵活的错误处理方式,适用于需要复杂请求配置的场景。而 `fetch`作为现代浏览器的原生API,使用起来更为简洁,但在旧浏览器兼容性和某些高级特性上可能略显不足。无论选择哪种方式,它们都能有效地在Vue应用中实现Ajax请求的功能。
77 4