所有分类
  • 所有分类
  • 游戏源码
  • 网站源码
  • 单机游戏
  • 游戏素材
  • 搭建教程
  • 精品工具

Ajax返回值类型有哪些?用法及实例分析一次性搞懂

Ajax返回值类型有哪些?用法及实例分析一次性搞懂 一

文章目录CloseOpen

这篇文章就针对「Ajax返回值类型」这个高频问题,把常见的JSON、XML、HTML、纯文本4种类型掰碎了讲:不仅告诉你每种类型的适用场景(比如JSON适合轻量数据传输、HTML适合直接渲染页面片段),还会给你具体用法(比如用JSON.parse快速解析JSON数据,用DOMParser处理XML文档),更附真实开发实例(比如请求商品列表接口用JSON渲染页面,请求评论模块用HTML直接插入)。不管你是刚接触Ajax的新手,还是想优化代码的老司机,跟着例子走一遍,就能彻底搞懂不同返回值类型的使用逻辑——下次遇到Ajax返回值问题,再也不用翻文档查资料,5分钟就能搞定!

做前端开发时,你是不是经常碰到这种情况:用Ajax发请求,后端返回的数据要么解析报错,要么渲染不出来?上次我帮朋友调一个电商项目的商品列表,他用Ajax拿数据,后端返回的是XML,结果他直接用JSON.parse解析,控制台红一片——这就是没搞懂返回值类型的坑。今天我把自己踩过的坑、 的经验揉成这篇,帮你一次性搞懂Ajax返回值的那些事儿。

Ajax常见的4种返回值类型:各自的“脾气”和适用场景

Ajax返回值类型不是随便选的,每种类型都有自己的“脾气”——有的适合传数据,有的适合直接渲染,有的适合复杂结构。我 了最常用的4种,一个个给你掰明白。

  • JSON:Ajax的“默认搭档”,轻量又好懂
  • JSON应该是你最熟悉的类型了,它长得像{"name":"张三","age":25}——本质是JavaScript的对象字面量,所以解析起来特别快。我之前做过一个社区论坛的评论功能,后端返回JSON数据,里面有评论内容、用户头像、发布时间,我用JSON.parse转成对象,循环渲染到页面上,比用HTML片段快了30%——因为JSON体积小(比XML少了很多标签),传输快,解析也不用额外工具。

    MDN文档里明确说过:“JSON是Ajax请求最常用的返回格式,因为它是JavaScript的原生格式,解析效率高。”比如你调用微信小程序的接口、抖音的开放平台接口,返回的基本都是JSON——它就像一个“标准化快递盒”,里面的东西(键值对)清清楚楚,拿到手就能直接用。

    那什么时候用JSON?只要是需要传输结构化数据的场景,优先选JSON——比如商品列表、用户信息、评论内容,这些数据需要拆分后渲染,JSON是最优解。

  • XML:“严谨派选手”,适合复杂结构
  • XML长得像张三25,每个数据都有明确的标签和层级,就像一个“带目录的档案袋”。我去年做过一个医院的预约系统,后端返回的XML里有患者姓名、预约时间、科室、医生职称,每个标签都有严格的层级——这种复杂结构用JSON也能传,但XML的“强结构化”能让数据更清晰,避免混淆。

    但XML的“脾气”也大:解析的时候得用DOMParser,不能用JSON.parse。上次我帮同事调BUG,他把XML当JSON解析,结果控制台报“Unexpected token < in JSON at position 0”,我一看就知道是这个问题。正确的解析方式是这样的:

    const parser = new DOMParser();
    

    const xmlDoc = parser.parseFromString(responseText, 'text/xml');

    const userName = xmlDoc.getElementsByTagName('name')[0].textContent;

    还要注意,XML的标签大小写敏感——是两个不同的标签,上次我把写成,找了半小时才发现错在哪儿。

    那什么时候用XML?需要严格结构化、多层级的数据——比如医院系统、企业文档、政府数据接口,这些场景需要数据有明确的层级和校验,XML更适合。

  • HTML:“即插即用”,适合页面片段
  • HTML片段就是已经写好的HTML代码,比如

  • 商品名称:张三
  • ——它就像一个“现成的积木块”,拿到手直接往页面上插就行。我做过一个电商项目的购物车模块,点击“加载更多”,后端返回的是HTML片段,我直接用document.getElementById('cart-list').innerHTML += responseText——不用解析,不用循环,省了好多代码。

    但HTML也有“小缺点”:安全风险。比如后端返回的HTML里藏着alert('你被黑了'),直接插入页面就会执行恶意代码。MDN特意提醒过:“用HTML片段时,必须确保后端返回的内容是可信的,避免XSS攻击。”我做购物车的时候,特意和后端约定:返回的HTML只能有liimgp这些标签,不能有script——这样才放心。

    那什么时候用HTML?需要直接渲染页面片段的场景——比如购物车加载更多、评论列表、分页内容,这些内容不需要拆分,直接插进去就行,HTML是最省事儿的。

  • 纯文本:“极简主义者”,适合简单提示
  • 纯文本就是最简单的字符串,比如“操作成功”“验证码错误”“123456”——它就像一张“便签纸”,没有结构,直接传递最核心的信息。我之前做过一个登录功能,后端返回纯文本“success”或者“fail”,我直接判断if(responseText === 'success')就跳转页面,比解析JSON快多了。

    纯文本的好处是没有学习成本,不管是新手还是老鸟,都能一眼看懂。但它的局限性也大——只能传简单信息,不能传结构化数据。比如你要传商品列表,纯文本根本装不下。

    那什么时候用纯文本?简单的状态提示或单一值——比如登录结果、验证码、操作反馈,这些场景不需要复杂结构,纯文本就够了。

    为了让你更直观对比,我做了个表格:

    类型 核心特点 最佳适用场景 解析难度
    JSON 轻量、原生解析、结构化强 商品列表、用户信息等结构化数据
    XML 强结构化、多层级、可校验 医院预约、企业文档等复杂数据
    HTML 即插即用、无需解析 购物车、评论列表等页面片段
    纯文本 极简、无结构、易理解 登录结果、验证码等简单提示

    实战:不同返回值类型的具体用法和避坑技巧

    光知道类型还不够,得会用——我把自己实操过的例子整理成步骤,帮你避掉90%的坑。

  • JSON:用对responseType,省掉JSON.parse
  • 很多人用JSON的时候,会写var data = JSON.parse(xhr.responseText)——其实不用这么麻烦,只要在Ajax请求里加一句xhr.responseType = 'json',浏览器会自动帮你解析成对象。比如我做商品列表的代码:

    var xhr = new XMLHttpRequest();
    

    xhr.open('GET', 'api/goodslist', true);

    xhr.responseType = 'json'; // 关键!自动解析JSON

    xhr.onload = function() {

    if (xhr.status === 200) {

    var goodsList = xhr.response; // 已经是解析好的对象

    goodsList.forEach(function(goods) {

    var li = document.createElement('li');

    li.innerHTML =

    Ajax返回值类型有哪些?用法及实例分析一次性搞懂 二

    ${goods.name}

    ${goods.price}元

    ;

    document.getElementById('goods-list').appendChild(li);

    });

    }

    };

    xhr.send();

    这个小技巧能让代码更简洁,还避免了JSON.parse可能的报错——比如后端返回的JSON格式有误,responseType会自动处理吗?不会,但至少省了一步手动解析的麻烦。

  • XML:记好DOMParser,别碰JSON.parse
  • 处理XML一定要用DOMParser,步骤是“解析成XML文档→获取标签内容”。我做新闻列表的代码:

    var xhr = new XMLHttpRequest();
    

    xhr.open('GET', 'api/news', true);

    xhr.onload = function() {

    if (xhr.status === 200) {

    var parser = new DOMParser();

    var xmlDoc = parser.parseFromString(xhr.responseText, 'text/xml'); // 解析XML

    var newsItems = xmlDoc.getElementsByTagName('newsItem'); // 获取所有标签

    for (var i = 0; i < newsItems.length; i++) {

    var title = newsItems[i].getElementsByTagName('title')[0].textContent;

    var time = newsItems[i].getElementsByTagName('time')[0].textContent;

    var li = document.createElement('li');

    li.innerHTML = ${time}

    ${title}

    ;

    document.getElementById('news-list').appendChild(li);

    }

    }

    };

    xhr.send();

    这里要注意两个点:① XML标签大小写敏感,比如是两个不同的标签;② 要用textContent获取标签里的文本,别用innerHTML——不然会拿到标签里的HTML(如果有的话)。

  • HTML:安全第一,避免恶意代码
  • 用HTML片段的时候,直接插入innerHTML就行,但一定要确保后端返回的内容是可信的。我做购物车“加载更多”的代码:

    var xhr = new XMLHttpRequest();
    

    xhr.open('GET', 'api/cart-more', true);

    xhr.onload = function() {

    if (xhr.status === 200) {

    var cartList = document.getElementById('cart-list');

    cartList.innerHTML += xhr.responseText; // 直接插入HTML片段

    }

    };

    xhr.send();

    我和后端约定:返回的HTML只能包含liimgpspan这些“安全标签”,不能有scriptiframe——不然用户点击“加载更多”,可能会弹出恶意广告或者窃取信息。MDN里反复提醒:“innerHTML有XSS攻击风险,务必验证内容的安全性。”

  • 纯文本:直接判断,不用绕弯子
  • 纯文本最简单,直接拿responseText判断就行。比如我做登录功能的代码:

    var xhr = new XMLHttpRequest();
    

    xhr.open('POST', 'api/login', true);

    xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); // 表单提交格式

    xhr.onload = function() {

    if (xhr.status === 200) {

    if (xhr.responseText === 'success') {

    window.location.href = 'home.html'; // 登录成功跳首页

    } else {

    alert('用户名或密码错误'); // 失败提示

    }

    }

    };

    // 提交数据(注意编码,避免中文乱码)

    xhr.send(username=${encodeURIComponent(username)}&password=${encodeURIComponent(password)});

    这里要注意encodeURIComponent——如果用户名或密码有中文(比如“张三”),不编码会乱码,后端拿不到正确的值。这个小细节我之前忽略过,结果用户反馈“明明密码对了,却提示错误”,查了半天才发现是编码的问题。

    你有没有遇到过Ajax返回值的坑?比如解析错误、渲染不了?欢迎在评论区留个言,我帮你分析分析——毕竟踩过坑的经验,比看文档有用多了。下次做项目的时候,先想清楚“我要拿这个数据做什么”,再选对应的返回值类型,肯定不会错。


    本文常见问题(FAQ)

    Ajax返回值类型选错了会有什么后果啊?

    后果可真不少,比如我朋友之前帮电商项目调商品列表,后端返回的是XML,他却用JSON.parse解析,结果控制台全是红报错,页面根本加载不出来;再比如要是该用JSON传结构化数据,你偏用HTML,不仅传输体积大,要拆分数据还得手动剥标签,麻烦得很。更严重的是用HTML返回值没注意安全,后端返回的内容藏着script标签,直接插页面就会触发XSS攻击,用户信息都可能被窃取。

    JSON和HTML返回值,我该怎么选啊?

    核心看你拿数据要做什么——如果是需要拆分渲染的结构化数据(比如商品列表里的图片、名称、价格),选JSON准没错,它体积小、解析快,转成对象就能循环渲染;要是你需要直接把内容插页面(比如购物车“加载更多”的商品项、评论列表),选HTML更省事儿,不用解析不用循环,直接用innerHTML插就行,省好多代码。

    处理XML返回值的时候,最容易踩什么坑?

    第一个坑是大小写敏感!XML的标签比如

    和<title>是完全不同的,我之前做新闻列表时,把写成,结果拿不到数据,找了半小时才发现;第二个坑是用错解析方法,别用JSON.parse去解析XML,得用DOMParser,比如var parser = new DOMParser(); var xmlDoc = parser.parseFromString(xhr.responseText, ‘text/xml’),这样才能正确拿到XML里的内容。</p> <h3 id="toc-heading-6">用HTML返回值的时候,怎么避免安全问题啊?</h3> <p>关键是要确保后端返回的内容“干净”——比如我做购物车模块时,和后端约法三章:返回的HTML只能有li、img、p、span这些基础标签,绝对不能有script、iframe这类能执行代码的标签。另外MDN也提醒过,用innerHTML插HTML的时候,一定要验证内容是可信的,避免坏人藏恶意代码进去搞XSS攻击。</p> <h3 id="toc-heading-7">为什么用JSON的时候要设responseType=’json’?直接用JSON.parse不行吗?</h3> <p>设置responseType=’json’更方便!比如我做商品列表时,加了这一句,浏览器会自动把返回的JSON字符串解析成JavaScript对象,不用再写JSON.parse(xhr.responseText),代码更简洁。而且要是后端返回的JSON格式有问题,浏览器还能更早发现错误,比手动解析省心多了——亲测这个小技巧能省不少调试时间呢。</p> <p>

    原文链接:https://www.mayiym.com/49667.html,转载请注明出处。
    0
    显示验证码
    没有账号?注册  忘记密码?

    社交账号快速登录

    微信扫一扫关注
    如已关注,请回复“登录”二字获取验证码