Ajax优化页面刷新的两种方法
这次给大家带来Ajax优化页面刷新的两种方法,Ajax优化页面刷新的注意事项有哪些,下面就是实战案例,一起来看一下。
控制器Servlet则提供了简单的改变:
对于Ajax系统而言,服务器响应无须是整个页面内容,可以仅是
必需的数据,控制器不能将数据请求转发到jsp页面。
此时控制器有两个选择:
1、直接生成简单的响应数据。
在这种模式下,Servlet直接通过response获取页面输出流,通过
输出流生成字符响应。
package pers.zkr.chat.web; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import pers.zkr.chat.service.ChatService; @WebServlet(urlPatterns={"/chat.do"}) public class ChatServlet extends HttpServlet { @Override public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub request.setCharacterEncoding("utf-8"); String msg=request.getParameter("chatMsg"); System.out.println(msg); if(msg!=null&&!msg.equals("")){ String user=(String)request.getSession().getAttribute("user"); System.out.println(user+"user"); ChatService.instance().addMsg(user, msg); } //设置响应内容的类型 <strong>response.setContentType("text/html;charset=utf-8"); // 获取页面输出流 PrintWriter out = response.getWriter(); //直接生成响应 out.println(ChatService.instance().getMsg());</strong> request.setAttribute("msg",ChatService.instance().getMsg()); forward("/chat.jsp", request , response); } private void forward(String url, HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub request.getRequestDispatcher(url) .forward(request , response); } }
2、转向一个简单的jsp使用JSP页面生成简单的响应。
控制器将请求转发到另外的JSP页面,而JSP页面仅仅负责输出聊天信息
在这里需要一个jsp页面来接收控制器发来的数据,也是服务器的响应文本,而在
原来的页面,只需:
1)创建XMLHttpRequest对象
2) 发送请求
3)接收服务器的响应
package org.crazyit.chat.web; import javax.servlet.*; import javax.servlet.http.*; import javax.servlet.annotation.*; import java.io.*; import org.crazyit.chat.service.*; /** * Description: * <br/>网站: <a href=http://www.jb51.net>脚本之家</a> * <br/>Copyright (C), 2001-2014, Yeeku.H.Lee * <br/>This program is protected by copyright laws. * <br/>Program Name: * <br/>Date: * @version 1.0 */ @WebServlet(urlPatterns={"/chat.do"}) public class ChatServlet extends HttpServlet { public void service(HttpServletRequest request, HttpServletResponse response)throws IOException,ServletException { // 设置使用GBK字符集来解析请求参数 request.setCharacterEncoding("utf-8"); String msg = request.getParameter("chatMsg"); if ( msg != null && !msg.equals("")) { // 取得当前用户 String user = (String)request.getSession(true) .getAttribute("user"); // 调用ChatService的addMsg来添加聊天消息 ChatService.instance().addMsg(user , msg); } // 将全部聊天信息设置成request属性 <strong>request.setAttribute("chatList" , ChatService.instance().getMsg());</strong> // 转发到chatreply.jsp页面 forward("/chatreply.jsp" , request , response); } // 执行转发请求的方法 private void forward(String url , HttpServletRequest request, HttpServletResponse response)throws ServletException,IOException { // 执行转发 request.getRequestDispatcher(url) .forward(request,response); } }
接收数据的页面
<%@ page contentType="text/html;charset=GBK" errorPage="error.jsp"%> <%-- 输出当前的聊天信息 --%> ${requestScope.chatList}
html页面
<!DOCTYPE html> <html> <head> <meta name="author" content="Yeeku.H.Lee(CrazyIt.org)" /> <meta http-equiv="Content-Type" content="text/html; charset=GBK" /> <title>聊天页面</title> </head> <body onload="sendEmptyRequest();"> <p style="width:780px;border:1px solid black;text-align:center"> <h3>聊天页面</h3> <p> <textarea id="chatArea" name="chatArea" cols="90" rows="30" readonly="readonly"></textarea> </p> <p align="center"> <input id="chatMsg" name="chatMsg" type="text" size="90" onkeypress="enterHandler(event);"/> <input type="button" name="button" value="提交" onclick="sendRequest();"/> </p> </p> <script type="text/javascript"> var input = document.getElementById("chatMsg"); input.focus(); var XMLHttpReq; // 创建XMLHttpRequest对象 function createXMLHttpRequest() { if(window.XMLHttpRequest) { // DOM 2浏览器 XMLHttpReq = new XMLHttpRequest(); } else if (window.ActiveXObject) { // IE浏览器 try { XMLHttpReq = new ActiveXObject("Msxml2.XMLHTTP"); } catch (e) { try { XMLHttpReq = new ActiveXObject("Microsoft.XMLHTTP"); } catch (e) { } } } } // 发送请求函数 function sendRequest() { // input是个全局变量,就是用户输入聊天信息的单行文本框 var chatMsg = input.value; // 完成XMLHttpRequest对象的初始化 createXMLHttpRequest(); // 定义发送请求的目标URL var url = "chat.do"; // 通过open方法取得与服务器的连接 // 发送POST请求 XMLHttpReq.open("POST", url, true); // 设置请求头-发送POST请求时需要该请求头 XMLHttpReq.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); // 指定XMLHttpRequest状态改变时的处理函数 XMLHttpReq.onreadystatechange = processResponse; // 清空输入框的内容 input.value = ""; // 发送请求,send的参数包含许多的key-value对。 // 即以:请求参数名=请求参数值 的形式发送请求参数。 XMLHttpReq.send("chatMsg=" + chatMsg); } //定时请求服务器 function sendEmptyRequest() { // 完成XMLHttpRequest对象的初始化 createXMLHttpRequest(); // 定义发送请求的目标URL var url = "chat.do"; // 发送POST请求 XMLHttpReq.open("POST", url, true); // 设置请求头-发送POST请求时需要该请求头 XMLHttpReq.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); // 指定XMLHttpRequest状态改变时的处理函数 XMLHttpReq.onreadystatechange = processResponse; // 发送请求,,不发送任何参数 XMLHttpReq.send(null); // 指定0.8s之后再次发送请求 setTimeout("sendEmptyRequest()" , 800); } // 处理返回信息函数 function processResponse() { // 当XMLHttpRequest读取服务器响应完成 if (XMLHttpReq.readyState == 4) { // 服务器响应正确(当服务器响应正确时,返回值为200的状态码) if (XMLHttpReq.status == 200) { // 使用chatArea多行文本域显示服务器响应的文本 document.getElementById("chatArea").value = XMLHttpReq.responseText; } else { // 提示页面不正常 window.alert("您所请求的页面有异常。"); } } } function enterHandler(event) { // 获取用户单击键盘的“键值” var keyCode = event.keyCode ? event.keyCode : event.which ? event.which : event.charCode; // 如果是回车键 if (keyCode == 13) { sendRequest(); } } </script> </body> </html>
相信看了本文案例你已经掌握了方法,更多精彩请关注php中文网其它相关文章!
推荐阅读:
以上是Ajax优化页面刷新的两种方法的详细内容。更多信息请关注PHP中文网其他相关文章!

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

热门话题

标题:解决jQueryAJAX请求出现403错误的方法及代码示例403错误是指服务器禁止访问资源的请求,通常会导致出现这个错误的原因是请求缺少权限或者被服务器拒绝。在进行jQueryAJAX请求时,有时候会遇到这种情况,本文将介绍如何解决这个问题,并提供代码示例。解决方法:检查权限:首先要确保请求的URL地址是正确的,同时验证是否有足够的权限来访问该资

jQuery是一个流行的JavaScript库,用于简化客户端端的开发。而AJAX则是在不重新加载整个网页的情况下,通过发送异步请求和与服务器交互的技术。然而在使用jQuery进行AJAX请求时,有时会遇到403错误。403错误通常是服务器禁止访问的错误,可能是由于安全策略或权限问题导致的。在本文中,我们将讨论如何解决jQueryAJAX请求遭遇403错误

如何解决jQueryAJAX报错403的问题?在开发网页应用程序时,经常会使用jQuery来发送异步请求。然而,有时候在使用jQueryAJAX时可能会遇到错误代码403,表示服务器禁止访问。这种情况通常是由服务器端的安全设置所导致的,但可以通过一些方法来解决这个问题。本文将介绍如何解决jQueryAJAX报错403的问题,并提供具体的代码示例。一、使

使用Ajax从PHP方法中获取变量是Web开发中常见的场景,通过Ajax可以实现页面无需刷新即可动态获取数据。在本文中,将介绍如何使用Ajax从PHP方法中获取变量,并提供具体的代码示例。首先,我们需要编写一个PHP文件来处理Ajax请求,并返回所需的变量。下面是一个简单的PHP文件getData.php的示例代码:

使用PHP和Ajax构建自动完成建议引擎:服务器端脚本:处理Ajax请求并返回建议(autocomplete.php)。客户端脚本:发送Ajax请求并显示建议(autocomplete.js)。实战案例:在HTML页面中包含脚本并指定search-input元素标识符。

Ajax(异步JavaScript和XML)允许在不重新加载页面情况下添加动态内容。使用PHP和Ajax,您可以动态加载产品列表:HTML创建一个带有容器元素的页面,Ajax请求加载数据后将数据添加到该元素中。JavaScript使用Ajax通过XMLHttpRequest向服务器发送请求,从服务器获取JSON格式的产品数据。PHP使用MySQL从数据库查询产品数据,并将其编码为JSON格式。JavaScript解析JSON数据,并将其显示在页面容器中。点击按钮触发Ajax请求,加载产品列表。

为了提升Ajax安全性,有几种方法:CSRF保护:生成令牌并将其发送到客户端,在请求中添加到服务器端进行验证。XSS保护:使用htmlspecialchars()过滤输入,防止恶意脚本注入。Content-Security-Policy头:限制恶意资源加载,指定允许加载脚本和样式表的来源。验证服务器端输入:验证从Ajax请求接收的输入,防止攻击者利用输入漏洞。使用安全Ajax库:利用jQuery等库提供的自动CSRF保护模块。

ajax不是一个具体的版本,而是一种使用多种技术的集合来异步加载和更新网页内容的技术。ajax没有具体的版本号,但是有一些ajax的变体或扩展:1、jQuery AJAX;2、Axios;3、Fetch API;4、JSONP;5、XMLHttpRequest Level 2;6、WebSockets;7、Server-Sent Events;8、GraphQL等等。
