ModifyAjaxResponse,修改ajax请求返回值,前后端调试之利器
一、概要
先看图

京豆多的离谱,你的第一想法肯定是:按F12修改了网页元素
没那么简单,你看支持刷新的

肯定还是假的,通过 Fiddler 或 Wireshark 等抓包工具修改了响应包;或者干脆改了本地host文件,指向了一个自己写的页面......
这些都太麻烦了,如果能在当前网页上拦截这个请求,并修改返回值,那才是最简单的
二、尝试
一个简单的ajax请求
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>test</title>
</head>
<body>
<div>
<input type="button" value="get_data" id="xhr_get">
</div>
<div>
<p>id -> <span id="id"></span></p>
<p>title -> <span id="title"></span></p>
<p>userId -> <span id="userId"></span></p>
<p>body -> <span id="body"></span></p>
</div>
<script src='https://cdnjs.cloudflare.com/ajax/libs/jquery/3.5.1/jquery.min.js'></script>
<script type="text/javascript">
$('#xhr_get').on('click', function () {
$.ajax({
url: 'https://jsonplaceholder.typicode.com/posts/1',
type: 'GET',
success: function (data) {
$('#id').text(data.id);
$('#title').text(data.title);
$('#userId').text(data.userId);
$('#body').text(data.body);
}
});
});
</script>
</body>
</html>
运行起来,点下按钮看看

如何拦截这个ajax请求并修改返回内容呢?
可以实现一个自定义的构造函数重写默认的XMLHttpRequest构造函数,使其在触发实际事件之前重写响应即可。按F12在控制台向页面注入代码试试

再次点击按钮,页面已经渲染到新的值了
由此证明,这条路是行的通的,但是不能每次都按F12注入,应该做到自动注入,并把所有拦截规则维护起来
三、Chrome插件
浏览器插件最适合做这个了,新建一个Chrome插件,命名:ModifyAjaxResponse
manifest.json
{
"manifest_version": 3,
"name": "ModifyAjaxResponse",
"description": "Modify response text of ajax requests",
"version": "1.4.0",
"content_scripts": [
{
"matches": [
"<all_urls>"
],
"js": [
"content_scripts.js"
],
"run_at": "document_start"
}
]
}
"run_at": "document_start",页面加载之前就注入 content_scripts.js,看看其内容
const script = document.createElement('script');
script.setAttribute('type', 'text/javascript');
script.setAttribute('src', chrome.runtime.getURL('dist/pageInjectScript.js'));
document.documentElement.appendChild(script);
向每个页面动态加载 pageInjectScript.js,用来重写默认的 XMLHttpRequest 构造函数,实现拦截页面 ajax请求的。打开博客园测试一下

可见 pageInjectScript.js 已经加载进来了,这个不是博客园服务器返回的,而是通过Chrome插件注入到页面上的
还差一个维护所有拦截规则的页面。使用 Chrome API 自带的存储 chrome.storage.local 保存即可。看看最终效果

至此,可以指哪打哪,随意修改页面展示内容了

四、总结
本插件当然不是改京豆数量自嗨用的,实际用途和开发初衷是:前后端对接接口,前端利用本插件,可以快速得到不同的返回值
注:
1)本方法仅重写XMLHttpRequest构造函数,F12网络面板里看到的还是原始返回值,但代码可以获取修改后的值;
2)非开发时间请关闭插件,避免向页面注入无用js
五、相关阅读
六、下载
源码:https://github.com/oppoic/ModifyAjaxResponse
Chrome 商店:https://chrome.google.com/webstore/detail/modifyajaxresponse/odpiadnfijfeggnnodoaaphkkjkmpnia
注:访问不了 Chrome 商店的话,下载源码本地加载src目录
ModifyAjaxResponse,修改ajax请求返回值,前后端调试之利器的更多相关文章
- 微信浏览器Ajax请求返回值走error
微信浏览器Ajax post请求是返回值走的error $.ajax({ type: "POST", url: "https://XXXX", cache: f ...
- AJAX请求,返回json进行页面绑值
AJAX请求,返回json进行页面绑值 后台 controller @RequestMapping(value = "backjson.do",method=RequestMeth ...
- Jquery ajax 得到返回值
Jquery ajax 得到返回值 1.ajax默认是异步调用的,所以得到的返回值是空值,要得到值必须改成同步:async: false,//同步. 2.必须定义一个全局变量 var result = ...
- ajax请求返回数据,模板中的数据处理
/*ajax请求返回数据,模板中的数据处理*/ function QueryGameAsset(){ var new_start_time=$('#new_start_time').val();//开 ...
- 在使用Ajax请求返回json数据的时候IE浏览器弹出下载保存对话框的解决方法
在使用Ajax请求返回json数据的时候IE浏览器弹出下载保存对话框的解决方法 最近在做一个小东西,使用kindeditor上传图片的时候,自己写了一个上传的方法,按照协议规则通过ajax返回json ...
- jQuery中ajax如何返回值到上层函数
jQuery中ajax如何返回值到上层函数 一.总结 一句话总结: ajax的同步操作即可,设置 async: false, 二.jquery的同步操作 var can_submit=true; $. ...
- charles_01_打断点修改接口请求&返回数据
前言 测试过程中,为了模拟某场景测试,经常需要修改接口请求或者返回数据.可通过抓包工具打断点,实现模拟测试场景.常用的抓包工具charles和fiddler均可打断点mock数据.由于小编安装了cha ...
- 前后端分离的利器:fiddler的实用功能举例
# 前后端分离的利器:fiddler的实用功能举例 ##what's fiddler fiddler是一款代理软件,对于前后端分离开发非常重要.可以说,如果前端开发没有用上fiddler或类似软件,那 ...
- Ajax与json在前后端中的细节解惑
ajax请求JSON Thinkphp中对是否为Ajax的判断,在TP3.2开发手册中有这么一段:“需要注意的是,如果使用的是ThinkAjax或者自己写的Ajax类库的话,需要在表单里面添加一个隐藏 ...
- 关于IE浏览器 ajax 请求返回数据不对的问题
在使用ajax向后台发送请求的时候,在使用ie 进行调试的时候发现根据条件进行查询时,返回的数据与没有根据条件进行查询时数据相同,也就是条件没有发生作用. 经过同事的帮助发现ajax初始化设置时没有c ...
随机推荐
- R语言操作入门
R语言基础之入门篇 一.初识R语言及环境搭建 R语言最初是由新西兰奥克兰大学统计系的教授Ross Ihaka和Robert Gentleman在S语言基础上开发完成的.是一门解释性语言.在我看来R语言 ...
- pandas之concat链接操作
Pandas 通过 concat() 函数能够轻松地将 Series 与 DataFrame 对象组合在一起,函数的语法格式如下: pd.concat(objs,axis=0,join='outer' ...
- [Java EE] java.net.SocketException: Connection reset【解决中】
1 错误描述 6:44:33.112] [DEBUG] [http-nio-9527-exec-3] [HttpClientUtil] http post url:http://bdp-gateway ...
- 如何在模型中引入可学习参数(Pytorch)
错误实例: def init(self): self.w1 = torch.nn.Parameter(torch.FloatTensor(1),requires_grad=True).cuda() s ...
- 分享一个提高运维效率的 Python 脚本
哈喽大家好我是咸鱼,今天给大家分享一个能够提升运维效率的 python 脚本 咸鱼平常在工作当中通常会接触到下面类似的场景: 容灾切换的时候批量对机器上的配置文件内容进行修改替换 对机器批量替换某个文 ...
- Ansible中的变量
Ansible中的变量 目录 Ansible中的变量 变量概述 变量定义的方式 变量的优先级 如何定义变量 playbook中定义变量 vars_file中定义变量 系统内置变量 inventory定义 ...
- percona-server-rocksdb-8.0.32 安装
MyRocks是关系型数据库Mysql 基于RocksDB 的存储引擎,一个可嵌入的.持久的键值存储.Percona MyRocks 是集于 Percona Server for MySQL的. Ro ...
- 2022-12-08:给定n棵树,和两个长度为n的数组a和b i号棵树的初始重量为a[i],i号树每天的增长重量为b[i] 你每天最多能砍1棵树,这天收益 = 砍的树初始重量 + 砍的树增长到这天的总
2022-12-08:给定n棵树,和两个长度为n的数组a和b i号棵树的初始重量为a[i],i号树每天的增长重量为b[i] 你每天最多能砍1棵树,这天收益 = 砍的树初始重量 + 砍的树增长到这天的总 ...
- 2022-09-20:以下go语言代码输出什么?A:8 8;B:8 16;C:16 16;D:16 8。 package main import ( “unsafe“ “fmt“ )
2022-09-20:以下go语言代码输出什么?A:8 8:B:8 16:C:16 16:D:16 8. package main import ( "unsafe" " ...
- 2020-11-25:go中,map的底层数据结构是什么?
福哥答案2020-11-25: 简单回答:hmap映射头.bmap桶.mapextra溢出额外信息 中级回答: // 映射头 type hmap struct { // Note: the forma ...