首页 > 其他分享 >Ajax 使用和问题集锦

Ajax 使用和问题集锦

时间:2023-05-09 13:57:45浏览次数:37  
标签:柠柠 utf databind value Ajax 集锦 使用 jackson

Ajax 使用和问题集锦

Ajax:Asynchronous JavaScript and XML(异步的 JavaScript 和 XML)。

introduce(简介)

  1. Ajax 是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术。

  2. Ajax 不是一种新的编程语言,而是一种用于创建更好更快以及交互性更强的Web应用程序的技术

  3. jQuery 不是生产者,而是大自然搬运工。

  4. jQuery Ajax 本质就是 XMLHttpRequest,对他进行了封装,方便调用!


usage(用法)

前端

下载 jQueryjquery-3.6.4.min.js.

$.get({
    url: "请求资源路径",
    data: {
        "k1": "v1",
        "k2": "v2"
    },
    success: function (result) {
        // 成功的回调函数
    }
})
$.post({
    url: "请求资源路径",
    data: {
        "k1": "v1",
        "k2": "v2"
    },
    success: function (result) {
        // 成功的回调函数
    }
})

后端

<dependency>
   <groupId>com.fasterxml.jackson.core</groupId>
   <artifactId>jackson-databind</artifactId>
   <version>2.13.3</version>
</dependency>
@RestController
@RequestMapping(value = "/ajax")
public class AjaxController {
    // 【错误示范❌】
    // SyntaxError: JSON.parse: unexpected character at line 1 column 1 of the JSON data
    @GetMapping("/hello")
    public String hello() {
        return "软柠柠吖";
    }

    // 【正确使用✔】
    // 注意:需要导入 Jackson-databind 依赖,否则会报错
	@GetMapping(value = "/hello2map")
    public Map<String, String> hello2Map() {
        Map<String, String> map = new HashMap<>();
        map.put("result", "软柠柠吖");
        return map;
    }
}


问题集锦

ajax 从后端获取的中文数据显示为乱码或问号

essence(本质)

乱码的本质:服务端返回的字符集编码 与 客户端的编码方式 不一致。

实际场景:服务端返回 ISO-8859-1,而客户端的编码默认是 UTF-8

问题图示

image-20230507184935877image-20230507185118713.


common resolve(通用解决)

Controller 层使用 @ResponseBody 返回中文字符串的响应的情况下,即使 web.xml 中配置了编码过滤器,但是编码过滤器并不会起作用。原因:当我们使用了 @ResponseBody 注解的时候,SpringMVC 会自动使用 StringHttpMessageConverter 解析字符串,默认采用 IS0-8859-1 的编码方式解析,这个时候我们需要在 SpringMVC 的配置文件中重新对 StringHttpMessageConverter 进行配置。

<!-- 开启 mvc 的注解驱动 -->
<mvc:annotation-driven>
    <mvc:message-converters>
        <bean class="org.springframework.http.converter.StringHttpMessageConverter">
            <property name="defaultCharset" value="utf-8"/>
            <property name="supportedMediaTypes">
                <set>
                    <value>text/plain;charset=utf-8</value>
                    <value>text/html;charset=utf-8</value>
                    <value>application/json;charset=utf-8</value>
                </set>
            </property>
        </bean>
    </mvc:message-converters>
</mvc:annotation-driven>

specific resolve(特殊解决)

添加produces = {"application/json;charset=utf-8"}

@RequestMapping(value = "/ajax", produces = {"application/json;charset=utf-8"})

或者导入 jackson-databind 依赖也可以解决乱码问题【推荐】

<dependency>
   <groupId>com.fasterxml.jackson.core</groupId>
   <artifactId>jackson-databind</artifactId>
   <version>2.13.3</version>
</dependency>


SyntaxError: JSON.parse: unexpected character at line 1 column 1 of the JSON

reappear(重现)

出现异常的条件:

  1. @RestController
  2. produces = {"application/json;charset=utf-8"} 处理字符乱码问题,将原来后端返回的 iso-8859-1 编码的数据转为 utf-8 编码格式的数据,从而避免乱码。或者导入 jackson-databind 依赖
  3. return "软柠柠吖"; 返回一个中文字符串 "软柠柠吖",非 key: value 格式。
@RestController
@RequestMapping(value = "/ajax")
public class AjaxController {
    @GetMapping(value = "/hello", produces = {"application/json;charset=utf-8"})
    public String hello() {
        return "软柠柠吖";
    }
}

image-20230509124307633.

image-20230509124456333.


essence(本质)

返回数据格式的问题,用 ajax 向后台查询的是一个字符串值,图方便只返回了一个 String,正确的 json 数据应该返回 key:value键值对,稍加修改后问题解决。

image-20230507183330002.


resolve(解决)

@GetMapping(value = "/hello2map")
public Map<String, String> hello2Map() {
    Map<String, String> map = new HashMap<>();
    map.put("result", "软柠柠吖");
    return map;
}

image-20230509130220669.



No converter for [class java.util.HashMap] with preset Content-Type 'null'

org.springframework.http.converter.HttpMessageNotWritableException: No converter for [class java.util.HashMap] with preset Content-Type 'null'

Could not find acceptable representation

org.springframework.web.servlet.handler.AbstractHandlerExceptionResolver.logException Resolved [org.springframework.web.HttpMediaTypeNotAcceptableException: Could not find acceptable representation]

image-20230509125351944.

上面两个问题的解决方案为添加依赖

<dependency>
   <groupId>com.fasterxml.jackson.core</groupId>
   <artifactId>jackson-databind</artifactId>
   <version>2.13.3</version>
</dependency>


参考博客

狂神说SpringMVC07:Ajax研究.

jQuery ajax - ajax() 方法.

搞定Jackson序列化与常用注解.

Jackson之jackson-databind.

Jackson使用详解.

为什么不能使用自闭合script标签引入jQuery?.

javascript中(function(){})($)与$(function)的区别.

jQuery中$(function() {});问题详解.

还有一些参考博客穿插在软柠柠吖博客的内容中,感谢这些博主的贡献❗

标签:柠柠,utf,databind,value,Ajax,集锦,使用,jackson
From: https://www.cnblogs.com/rnny/p/17384622.html

相关文章

  • (原)Windows 7 64位旗舰版下 工商银行旧版金邦达U盾的无法使用的解决方法
    第三篇原创了,就是短了一点,大家见谅。 先把解决方法说一下,就是破财消灾,花48RMB又买了一个新的U盾(也是金邦达的,样子很土的像个山寨的U盘,做工明显没有老版的好)。但是也看到有人说老版的在Win764bit下仍旧可用,详见这个链接http://bbs.pcbeta.com/viewthread.php?tid=591837,该文中提......
  • Docker 使用教程
    Docker使用教程Docker的简介和安装Docker是一个应用打包、分发、部署的工具。你也可以把它理解为一个轻量的虚拟机,它只虚拟你软件需要的运行环境,多余的一点都不要,而普通虚拟机则是一个完整而庞大的系统,包含各种不管你要不要的软件。Docker为什么比虚拟机快?Docker有着比......
  • 【pytorch】土堆pytorch教程学习(六)神经网络的基本骨架——nn.module的使用
    torch.nn是pytorch的一个神经网络库(nn是neuralnetwork的简称)。Containerstorch.nn构建神经网络的模型容器(Containers,骨架)有以下六个:ModuleSequentialModuleListModuleDictParameterListParameterDict本博文将介绍神经网络的基本骨架——nn.module的使用。......
  • BNE0x03Simple - 内核提权 searchsploit使用
    主机发现sudonmap-sT--min-rate10000-p-xx.xx.xx.xx-oAnmapscan/ports只有一个端口开放sudonmap-sT-sV-sC-O-pxx.xxx.xx.xx-oAnmapscan/detailsudonmap-sU--top-ports20xx.xx.xx.xx-oAnmapscan/udpsudonmap--script=vuln-pxx.xx.xx.xx-oAnma......
  • (转)Offline List 使用教程
    OfflineList使用教程一、OfflineList基本介绍管理工具说简单点就是用来整理自己roms的工具,OfflineList由于界面直观,操作简单比较受欢迎。最新版是v0.7.3beta2,下载地址:http://offlinelist.free.fr/是依靠crc和size进行校验的本文由电玩盒子收集整理,转载请注明出处:ht......
  • A100服务器使用过程的曲折
    使用A100显卡跑程序时,当使用多张卡一起跑的时候就会出现程序卡住不动的情况,这是由于系统的BIOS里IO虚拟化默认启动了PCI访问控制服务(ACS)导致GPU间无法直接通过P2P方式通信exportNCCL_P2P_DISABLE=1在代码程序前加上这个命令就能多卡运行了、......
  • httprunner 4.x学习 - 7.环境变量.env 的使用
    前言一般来说,在进行实际应用的开发过程中,应用会拥有不同的运行环境,通常会有以下环境:本地开发环境测试环境生产环境在不同环境中,我们可能会使用不同的数据库或邮件发送等配置,这时候则需要通过.env文件来针对不同的运行环境作不同的设置。环境变量基础知识在自动化测试中......
  • macOS下使用VS Code配置C/C++开发环境
      macOS系统中默认的C/C++编译器是clang/clang++,命令行使用gcc/g++或者clang/clang++来执行命令时,都是调用clang/clang++编译器,想使用gcc/g++编译器结合VSCode进行开发的话,我们可以自己安装。查看一下gcc和clang   1.安装Homebrew,官网链接,复制粘贴到Terminal运行脚......
  • PHP trait使用
    一、trait、继承、实例化三者的区别对于当前一个类需要用到另一个或多个类的方法的情况,我们一般会想到的方式有继承、直接实例化另外一个或多个类等等的方法,来对比一下这些方法和Trait类的区别:继承:对于继承,可以完美地复用另一个类的一些方法,但是对于需要复用多个类的方法时,PHP......
  • 使用 Sa-Token 完成踢人下线功能
    一、需求在企业级项目中,踢人下线是一个很常见的需求,如果要设计比较完善的话,至少需要以下功能点:可以根据用户userId踢出指定会话,对方再次访问系统会被提示:您已被踢下线,请重新登录。可以查询出一个账号共在几个设备端登录,并返回其对应的Token凭证,以便后续操作。可以只踢出......