首页 > 其他分享 >ajax乱码问题和异步同步问题

ajax乱码问题和异步同步问题

时间:2023-05-27 13:01:01浏览次数:42  
标签:异步 请求 乱码 xhr ajax import servlet

1. 测试内容: 20

1.1 发送ajax get请求

    发送数据到服务器,服务器获取的数据是否乱码?

    - 服务器响应给前端的中文,会不会乱码?

1.2 发送ajax post请求

    - 发送数据到服务器,服务器获取的数据是否乱码?

    - 服务器响应给前端的中文,会不会乱码?

1.3 包括还要测试tomcat服务器的版本:

  - tomcat10和tomcat9都要进行测试。

2. 测试结果:20

  - 对于tomcat10来说,关于字符集,我们程序员不需要干涉,不会出现乱码。

 对于tomcat9来说呢?

    - 响应中文的时候,会出现乱码,怎么解决?

      response.setContentType("text/html;charset=UTF-8");

    - 发送ajax post请求的时候,发送给服务器的数据,服务器接收之后乱码,怎么解决?

      request.setCharacterEncoding("UTF-8");

代码在com.bjpowernode.ajax.servlet

AjaxRequest7Servlet

package com.bjpowernode.ajax.servlet;

import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;

import java.io.IOException;
import java.io.PrintWriter;

//测试ajax乱码问题  20
@WebServlet("/ajaxrequest7")
public class AjaxRequest7Servlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        //接收的中文会不会出现乱码问题
        String username = request.getParameter("username");
        System.out.println(username);
        //响应的中文会有乱码嘛
        //get请求tomcat9以及之前的版本,这行代码是必须的
        //response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        out.print(username);
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        //接收的中文会不会出现乱码问题
        //post请求 tomcat9以及之前的版本,这行代码是必须的
        //request.setCharacterEncoding("UTF-8");
        String username = request.getParameter("username");
        System.out.println(username);
        //响应的中文会有乱码嘛
        PrintWriter out = response.getWriter();
        out.print(username);
    }
}

E:\java学习\Ajax\course\course6\web

ajax8.html

<!--测试ajax乱码问题  20-->
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>测试ajax乱码问题</title>
</head>
<body>
<script type="text/javascript">
    window.onload = function (){
        document.getElementById("btn1").onclick = function (){
            var xhr = new XMLHttpRequest();
            xhr.onreadystatechange = function (){
                if (this.readyState==4) {
                    if(this.status==200){
                        document.getElementById("mydiv").innerHTML = this.responseText
                    }
                }
            }
            var username = document.getElementById("username").value
            xhr.open("GET","/ajax/ajaxrequest7?username="+username+"&t="+new Date().getTime(),true)
            xhr.send()
        }
        document.getElementById("btn2").onclick = function (){
            var xhr = new XMLHttpRequest();
            xhr.onreadystatechange = function (){
                if (this.readyState==4) {
                    if(this.status==200){
                        document.getElementById("mydiv").innerHTML = this.responseText
                    }
                }
            }
            xhr.open("POST","/ajax/ajaxrequest7",true)
            xhr.setRequestHeader("Content-type","application/x-www-form-urlencoded")
            var username = document.getElementById("username").value
            xhr.send("username="+username)
        }
    }
</script>

<input type="text" id="username">
<button id="btn1">发送ajax get请求,测试乱码问题</button>
<button id="btn2">发送ajax post请求,测试乱码问题</button>
<div id="mydiv"></div>

</body>
</html>

3. AJAX的异步与同步  21

3.1 什么是异步?什么是同步?  21

  - ajax请求1和ajax请求2,同时并发,谁也不用等谁,这就是异步。(a不等b,b也不等a)

  - 如果ajax请求1在发送的时候需要等待ajax请求2结束之后才能发送,那么这就是同步。(a等待b,或者b等待a,只要发生等待,就是同步。)

3.2 异步和同步在代码上如何实现?  21

 3.2.1 假设这个是ajax请求1    21

如果第三个参数是false:这个就表示“ajax请求1”不支持异步,也就是说ajax请求1发送之后,会影响其他ajax请求的发送,只有当我这个请求结束之后,你们其他的ajax请求才能发送。

false表示,不支持异步。我这个请求发了之后,你们其他的请求都要靠边站。都等着。你们别动呢,等我结束了你们再说。

  xhr1.open("请求方式", "URL", false)

  xhr1.send()

3.2.2 假设这个是ajax请求2     21

如果第三个参数是true:这个就表示“ajax请求2”支持异步请求,也就是说ajax请求2发送之后,不影响其他ajax请求的发送。

  xhr2.open("请求方式", "URL", true) 

  xhr2.send()

代码在com.bjpowernode.ajax.servlet    21

AjaxRequest8Servlet

package com.bjpowernode.ajax.servlet;

import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;

import java.io.IOException;
import java.io.PrintWriter;

//演示ajax的同步或者异步  21

@WebServlet("/ajaxrequest8")
public class AjaxRequest8Servlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        try {
            //设置睡眠时间
            Thread.sleep(10*1000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        response.setContentType("text/html;chaset=UTF-8");
        PrintWriter out = response.getWriter();
        out.print("ajax请求1");
    }
}

AjaxRequest9Servlet

package com.bjpowernode.ajax.servlet;

import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;

import java.io.IOException;
import java.io.PrintWriter;

//演示ajax的同步或者异步  21
@WebServlet("/ajaxrequest9")
public class AjaxRequest9Servlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        out.print("ajax请求2");
    }
}

E:\java学习\Ajax\course\course6\web

ajax9.html

<!--演示ajax的同步或者异步  21-->
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>演示ajax的同步或者异步</title>
</head>
<body>
<script type="text/javascript">
    window.onload = function (){
        document.getElementById("btn1").onclick = function (){
            var xhr = new XMLHttpRequest();
            xhr.onreadystatechange = function (){
                if(this.readyState==4){
                    if(this.status==200){
                        document.getElementById("div1").innerHTML = this.responseText
                    }else {
                        alert(this.status)
                    }
                }
            }
            //xhr.open("GET","/ajax/ajaxrequest8?t="+new Date().getTime(),true)
            // 我不支持异步了,我这个请求只要发,你们都得靠边站。都得等着我结束你们才能发请求。
            xhr.open("GET", "/ajax/ajaxrequest8?t=" + new Date().getTime(), false)
            xhr.send()
        }

        document.getElementById("btn2").onclick = function (){
            var xhr = new XMLHttpRequest();
            xhr.onreadystatechange = function (){
                if (this.readyState == 4) {
                    if (this.status == 200) {
                        document.getElementById("div2").innerHTML = this.responseText
                    }else{
                        alert(this.status)
                    }
                }
            }
            xhr.open("GET", "/ajax/ajaxrequest9?t=" + new Date().getTime(), true)
            xhr.send()
        }
    }
</script>

<button id="btn1">ajax请求1</button>
<div id="div1"></div>

<button id="btn2">ajax请求2</button>
<div id="div2"></div>

</body>
</html>

标签:异步,请求,乱码,xhr,ajax,import,servlet
From: https://blog.51cto.com/u_15784725/6362061

相关文章

  • ajax技术学习
    ajax处理异步请求,刷新部分网页,不会将整个页面重新加载,左侧文本框输入数据,输入完成后实时显示在同业页面另一侧就用到了这个技术<scripttype="text/javascript">$(function(){//绑定键盘输入事件$('input').keyup(function(){//构造参数......
  • 解决mysqldump 导出中文乱码的问题
    导数据库mysqldump-uroot-p111111-P3306-h127.0.0.1test>/data/test.sql导出后的数据库打开是乱码,如下:开始以为打开的方式不对,就用记事本打开后,用utf-8的编码格式另保存下结果打开后,仍然是乱码。这时候,猜测是不是数据库的字符集的编码有问题,然后进入数据库,输入命......
  • C#异步编程概念和使用
    异步编程要搞懂3个概念async、Task、await;async修饰符指明方法为异步方法;Task是异步方法返回类型;await是运算符,用来等待异步方法完成;当在异步方法中调用异步方法(理解为启动任务),可以在合适的时机等待任务完成,然后再使用返回的结果,这就是异步编程的优势,可以在一个过程中执行多......
  • pycharm打开项目乱码解决方案
    常见乱码情况:控制台,左侧项目名称或程序中包含中文,展示乱码,一般产生的原因为编码格式不同导致的乱码,可以通过以下步骤设置。方法一:通过“File”->“FileEncoding”,设置“ProjectEncoding”为UTF-8方法二:如果是新增文件乱码,则可以在文件第一行设置编码格式#coding:gbk方法三:上......
  • Django——AJAX
    AJAX(AsynchronousJavascriptAndXML)翻译成中文就是“异步的Javascript和XML”。AJAX不是新的编程语言,而是一种使用现有标准的新方法。使用Javascript语言与服务器进行异步交互的,并进行局部刷新。传输的数据为XML(当然,传输的数据不只是XML)AJAX最大的优点是在不重新加载整个......
  • JS 里如何实现异步?
    由于JS是单线程程操作,所以遇到了一些比较耗时的操作时,会影响到主线程的效率,比如在扫描二维码应用中,解析QRcode的过程中会造成页面相机流的卡顿。所以将耗时的解析过程放到子线程中就不会影响到主线程。使用webworker可以实现这个功能。1.子线程在子线程web_worker.js中使......
  • 转:Visual Studio如何调试异步代码
    转自:https://www.duidaima.com/Group/Topic/ASP.NET/10666虽然异步代码可以提高程序的整体吞吐量,但异步代码仍然无法免除错误!当潜在的死锁、模糊的错误消息以及查找导致Bug的Task时,编写异步代码会使调试更加困难。幸运的是,VisualStudio具有与托管的、本地的和JavaScript......
  • 【java】同步异步和多线程编程
    Java基本概念并发基于时间段内的,同时发生(处理多个任务的能力,时间段)存在同步和互斥的问题(任务之间的时序问题)同步:前一个处理的结果作为下一个处理的资源(互相之间有依赖)互斥:不能同时使用临界资源。解决时序问题的机制:锁,信号量,原子操作Java中的多线程机制并行(完全......
  • 异步编程(Thread、ThreadPool、Task、异步关键字async/await)
    一、什么是异步Thread,是微软.Net1.0推出;ThreadPool 是微软.Net2.0推出;Task是微软.Net4.0推出;async/await是微软.Net5.0推出;       同步和异步主要用于修饰方法。当一个方法被调用时,调用者需要等待该方法执行完毕并返回才能继续执行,我们称这个方法是同步方法;当一个方......
  • JS的异步化特征async await
    参考:https://segmentfault.com/a/1190000007535316https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promisehttps://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Operators/awaithttps://developer.mozilla.org/zh-CN/......