ModifyAjaxResponse,修改ajax请求返回值,前后端调试之利器

这篇具有很好参考价值的文章主要介绍了ModifyAjaxResponse,修改ajax请求返回值,前后端调试之利器。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、概要

先看图

ModifyAjaxResponse,修改ajax请求返回值,前后端调试之利器

 

京豆多的离谱,你的第一想法肯定是:按F12修改了网页元素

没那么简单,你看支持刷新的

 ModifyAjaxResponse,修改ajax请求返回值,前后端调试之利器

 

肯定还是假的,通过 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>

运行起来,点下按钮看看

ModifyAjaxResponse,修改ajax请求返回值,前后端调试之利器

 

如何拦截这个ajax请求并修改返回内容呢?

可以实现一个自定义的构造函数重写默认的XMLHttpRequest构造函数,使其在触发实际事件之前重写响应即可。按F12在控制台向页面注入代码试试(也可以写到 html页面里,效果一样)

var ajax_open_original = XMLHttpRequest.prototype.open;
function intercept_ajax(rule) {
    XMLHttpRequest.prototype.open = function () {
        var open_arguments = arguments;
        var url = open_arguments[1];
        var flag = false;
        var xhrTxt = '';
        if (url.indexOf(rule.pattern) > -1) {
            flag = true;
            xhrTxt = rule.response;
        }
        this.addEventListener('readystatechange', function (event) {
            if (flag && this.readyState === 4) {
                Object.defineProperty(this, 'response', { writable: true });
                Object.defineProperty(this, 'responseText', { writable: true });
                this.response = this.responseText = xhrTxt;
            }
        });
        return ajax_open_original.apply(this, open_arguments);
    };
};
intercept_ajax({
    pattern: 'https://jsonplaceholder.typicode.com/posts/1',
    response: JSON.stringify({ id: 1, title: '2', userId: 3, body: 'body' })
});

 

ModifyAjaxResponse,修改ajax请求返回值,前后端调试之利器

 

再次点击按钮,页面已经渲染到新的值了

由此证明,这条路是行的通的,但是不能每次都按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请求。打开博客园测试一下

ModifyAjaxResponse,修改ajax请求返回值,前后端调试之利器

 

可见 pageInjectScript.js 已经加载进来了,这个不是博客园服务器返回的,而是通过Chrome插件注入的。既然已经注入页面了,那当前页面所有的ajax请求都可以被重写

还差一个维护所有拦截规则的页面。使用 Chrome API 自带的存储 chrome.storage.local 保存即可。简单画个页面,看看最终效果

ModifyAjaxResponse,修改ajax请求返回值,前后端调试之利器

 

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

ModifyAjaxResponse,修改ajax请求返回值,前后端调试之利器

  

四、总结

这个当然不是改京豆数量自嗨用的,实际用途以及开发初衷是:前后端对接接口,前端利用本插件,可以快速得到不同的返回值

注:

1)本插件仅重写XMLHttpRequest构造函数,F12网络面板里看到的还是原始返回值,但代码可以获取修改后的值;

2)非开发时间请关闭插件,避免向页面注入无用js

五、相关阅读

修改Ajax返回内容

油猴脚本重写fetch和xhr请求

ajax-interceptor

requestly

六、下载

源码:https://github.com/oppoic/ModifyAjaxResponse

Chrome 商店:https://chrome.google.com/webstore/detail/modifyajaxresponse/odpiadnfijfeggnnodoaaphkkjkmpnia

注:访问不了 Chrome 商店的话,下载源码本地加载src目录 文章来源地址https://www.toymoban.com/news/detail-501244.html

到了这里,关于ModifyAjaxResponse,修改ajax请求返回值,前后端调试之利器的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Spring/SpringBoot 过滤器修改、获取http 请求request中的参数 和 response返回值,比如修改请求体和响应体的字符编码

    通过自定义filter,RequestWrapper,ResponseWrapper 处理请求和响应数据,比如修改请求体和响应体的字符编码 1.request 和 response 中的数据都是 存在流中的(缓存中)获取一次就没有了,需要重新写回去。所以需要两个包装类分别继承HttpServletRequestWrapper 和 HttpServletResponseWrapper 对 r

    2024年02月15日
    浏览(31)
  • layui上传文件弹出请求上传接口出现异常的终极解决方案(v2.68版本、ajax底层逻辑修改、debug快速定位)

    解决layUI请求上传接口出现异常的解决方案 layui框架实战案例(3):layui上传错误请求上传接口出现异常解决方案 漏刻有时导入数据layUI上传提示“请求上传接口出现异常”的解决方案 layui上传文件弹出请求上传接口出现异常的终极解决方案 layui版本 v2.68; 报错:请求上传接口

    2024年02月16日
    浏览(27)
  • 高级网络调试技巧:使用Charles Proxy捕获和修改HTTP/HTTPS请求

    目录 1、简介 2、安装和设置 3、捕获HTTP/HTTPS请求 4、修改HTTP/HTTPS请求 5、断点和日志记录 6、过滤和排序请求 7、导出和导入数据 8、高级功能和技术 9、实际应用 总结 在调试网络应用时,了解如何捕获和修改HTTP/HTTPS请求是非常有用的。这些技巧对于识别和解决问题,以及测

    2024年02月08日
    浏览(52)
  • 探索 AJAX 技术:实现动态数据交互的前端利器

    简介: AJAX(Asynchronous JavaScript and XML)技术在 Web 前端开发中扮演着重要的角色,它通过异步通信和动态内容更新,为用户带来更好的交互体验。本篇笔记将详细探索 AJAX 技术,并通过生动的代码演示来展示其在实现动态数据交互方面的优势。 1. 异步通信 异步通信是一种在

    2024年02月14日
    浏览(31)
  • AJAX 前端开发利器:实现网页动态更新的核心技术

    AJAX是开发者的梦想,因为你可以: 在不重新加载页面的情况下更新网页 在页面加载后请求来自服务器的数据 在页面加载后接收来自服务器的数据 在后台向服务器发送数据 HTML页面 HTML页面包含一个 div 部分和一个 button div 部分用于显示来自服务器的信息 button 调用一个函数(

    2024年03月22日
    浏览(42)
  • 前后端交互——Ajax

    Ajax 即“AsynchronousJavascriptAndXML”(异步 JavaScript 和 XML) ,是指 一种创建交互式应用的网页开发技术 。通俗的理解就是在网页中利用XMLHttpRequest对象和服务器进行数据交互的方式。 传统的网页(不使用 Ajax)如果需要更新内容,必须重载整个网页页面。其缺点如下: 1. 本身是

    2023年04月10日
    浏览(24)
  • 前后端交互Ajax

    1.1 服务器 上网过程中,负责 存放和对外提供资源 的电脑,叫做服务器。 上网的过程中,负责 获取和消费资源 的电脑,叫做客户端。 1.2 URL 地址 URL(全称是UniformResourceLocator)中文叫做 统一资源定位符 ,用于表示互联网上每个资源的唯一存放位置。浏览器只有通过URL地址

    2024年02月07日
    浏览(37)
  • Ajax(实现前后端交互效果)

    Ajax学习目标: 能够知道和服务器相关的基本概念;知道客户端和服务器通信的过程;什么是Ajax以及应用场景,知道接口和接口文档的概念。 1.客户端和服务器概念: 上网的本质目的:通过互联网的形式来获取和消费资源; 服务器:上网过程中,负责存放和对外提供资源的

    2024年02月05日
    浏览(39)
  • django Ajax--前后端数据交互

    Django的Ajax和JavaScript的Ajax实质上是指同一种技术,即异步JavaScript和XML(Asynchronous JavaScript and XML)。它允许在不刷新整个页面的情况下,通过前后端之间的异步交互来获取或发送数据。 区别在于角色和层次: Django的Ajax: Django的Ajax通常是指在Django框架中使用Ajax技术的方式。

    2024年02月14日
    浏览(39)
  • 使用ajax进行前后端交互的方法

    使用ajax进行前后端交互的方法:(我只测试通了json对象作为参数的方式,其他方式我没有测试通过) 1、前端方法: 传参方式:POST 请求类型:json对象 响应类型:json对象 2、后端方法:无需创建一个类来接收前端传来的json字符串,需要注意是:使用的接收参数必须与前端定

    2024年02月14日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包