<i id='A59Vz'><tr id='A59Vz'><dt id='A59Vz'><q id='A59Vz'><span id='A59Vz'><b id='A59Vz'><form id='A59Vz'><ins id='A59Vz'></ins><ul id='A59Vz'></ul><sub id='A59Vz'></sub></form><legend id='A59Vz'></legend><bdo id='A59Vz'><pre id='A59Vz'><center id='A59Vz'></center></pre></bdo></b><th id='A59Vz'></th></span></q></dt></tr></i><div id='A59Vz'><tfoot id='A59Vz'></tfoot><dl id='A59Vz'><fieldset id='A59Vz'></fieldset></dl></div>
    <tfoot id='A59Vz'></tfoot>

    <small id='A59Vz'></small><noframes id='A59Vz'>

    1. <legend id='A59Vz'><style id='A59Vz'><dir id='A59Vz'><q id='A59Vz'></q></dir></style></legend>

          <bdo id='A59Vz'></bdo><ul id='A59Vz'></ul>

      1. 如何修改另一个函数接收到的 XMLHttpRequest 响应文

        <i id='3swiV'><tr id='3swiV'><dt id='3swiV'><q id='3swiV'><span id='3swiV'><b id='3swiV'><form id='3swiV'><ins id='3swiV'></ins><ul id='3swiV'></ul><sub id='3swiV'></sub></form><legend id='3swiV'></legend><bdo id='3swiV'><pre id='3swiV'><center id='3swiV'></center></pre></bdo></b><th id='3swiV'></th></span></q></dt></tr></i><div id='3swiV'><tfoot id='3swiV'></tfoot><dl id='3swiV'><fieldset id='3swiV'></fieldset></dl></div>

        <legend id='3swiV'><style id='3swiV'><dir id='3swiV'><q id='3swiV'></q></dir></style></legend>

        1. <tfoot id='3swiV'></tfoot>

          <small id='3swiV'></small><noframes id='3swiV'>

                • <bdo id='3swiV'></bdo><ul id='3swiV'></ul>

                    <tbody id='3swiV'></tbody>
                  本文介绍了如何修改另一个函数接收到的 XMLHttpRequest 响应文本?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!


                  我正在尝试修改我无法修改的函数接收到的 responseText.此函数创建一个我可以附加到的 XMLHttpRequest,但我无法以一种允许我在原始函数接收到内容之前修改内容的方式包装"responseText.

                  I am trying to modify the responseText received by a function that I cannot modify. This function creates a XMLHttpRequest that I can attach to, but I have been unable to "wrap" the responseText in a way that allows me to modify the content before the original function receives it.


                  function Mj(a, b, c, d, e) {
                      function k() {
                          4 == (m && 'readyState' in m ? m.readyState : 0) && b && ff(b) (m)
                      var m = new XMLHttpRequest;
                      'onloadend' in m ? m.addEventListener('loadend', k, !1)  : m.onreadystatechange = k;
                      c = ('GET').toUpperCase();
                      d = d || '';
                      m.open(c, a, !0);
                      return m
                  function ff(a) {
                      return a && window ? function () {
                          try {
                              return a.apply(this, arguments)
                          } catch(b) {
                              throw jf(b),
                      } : a

                  我也尝试过操纵接收函数 k();试图达到我的目标,但由于它不依赖于传递给函数的任何数据(例如 k(a.responseText);)我没有成功.

                  I have also tried to manipulate the reiceiving function k(); in an attempt to reach my goal, but since it doesn't depend on any data passing to the function (for example k(a.responseText);) I had no success.

                  有什么方法可以实现吗?我不希望使用 js 库(如 jQuery);

                  Is there any way that I can achieve this? I do not wish to use js libraries (such as jQuery);

                  编辑:我知道我无法直接更改 .responseText,因为它是只读的,但我正在尝试找到一种方法来更改响应和接收函数之间的内容.

                  EDIT: I understand that I cannot change .responseText directly since it is read-only, but I am trying to find a way to change the content between the response and receiving function.

                  EDIT2:在我尝试拦截和更改已从此处添加的 .responseText 的方法之一下方添加:猴子补丁 XMLHTTPRequest.onreadystatechange

                  EDIT2: Added below one of the methods I have tried to intercept and change .responseText which has been addapted from here: Monkey patch XMLHTTPRequest.onreadystatechange

                  (function (open) {
                  XMLHttpRequest.prototype.open = function (method, url, async, user, pass) {
                      if(/results/.test(url)) {
                          this.addEventListener("readystatechange", function () {
                              console.log('readystate: ' + this.readyState);
                              if(this.responseText !== '') {
                                  this.responseText = this.responseText.split('&')[0];
                          }, false);
                      open.call(this, method, url, async, user, pass);


                  EDIT3:我忘了包括函数 Mj 和 ff 不是全局可用的,它们都包含在一个匿名函数中 (function(){functions are here})();

                  EDIT3: I forgot to include that the functions Mj and ff are not globally available, they are both contained inside an anonymous function (function(){functions are here})();

                  EDIT4:我更改了接受的答案,因为 AmmarCSE 没有任何与 jfriend00 的答案相关的问题和复杂性.

                  EDIT4: I have changed the accepted answer because AmmarCSE's does not have any of the problems and complexity linked to jfriend00's answer.


                  The best answer explained in short is as follows:


                  Listen to whichever request you want to modify (make sure your listener will intercept it before the original function destination does, otherwise there is no point in modifying it after the response has already been used).


                  Save the original response (if you want to modify it) in a temporary variable


                  Change the property you want to modify to "writable: true", it will erase whichever value it had. In my case I use

                  Object.defineProperty(event, 'responseText', {
                      writable: true


                  Where event is the object returned by listening to the load or readystatechange event of the xhr request


                  Now you can set anything you want for your response, if all you wanted was to modify the original response then you can use that data from your temporary variable and then save the modifications in the response.


                  一个非常简单的解决方法是更改​​ responseText 本身的属性描述符

                  One very simple workaround is to change the property descriptor for responseText itself

                  Object.defineProperty(wrapped, 'responseText', {
                       writable: true


                  (function(proxied) {
                      XMLHttpRequest = function() {
                          //cannot use apply directly since we want a 'new' version
                          var wrapped = new(Function.prototype.bind.apply(proxied, arguments));
                          Object.defineProperty(wrapped, 'responseText', {
                              writable: true
                          return wrapped;


                  这篇关于如何修改另一个函数接收到的 XMLHttpRequest 响应文本?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持html5模板网!

                  上一篇:XMLHttpRequest、jQuery.ajax、jQuery.post、jQuery.get 有什么 下一篇:XmlHttpRequest onprogress 间隔



                      <bdo id='gZkno'></bdo><ul id='gZkno'></ul>
                    <i id='gZkno'><tr id='gZkno'><dt id='gZkno'><q id='gZkno'><span id='gZkno'><b id='gZkno'><form id='gZkno'><ins id='gZkno'></ins><ul id='gZkno'></ul><sub id='gZkno'></sub></form><legend id='gZkno'></legend><bdo id='gZkno'><pre id='gZkno'><center id='gZkno'></center></pre></bdo></b><th id='gZkno'></th></span></q></dt></tr></i><div id='gZkno'><tfoot id='gZkno'></tfoot><dl id='gZkno'><fieldset id='gZkno'></fieldset></dl></div>
                  1. <small id='gZkno'></small><noframes id='gZkno'>

                    <tfoot id='gZkno'></tfoot>

                    1. <legend id='gZkno'><style id='gZkno'><dir id='gZkno'><q id='gZkno'></q></dir></style></legend>