2017-07-31 1 views
1

Je veux intercepter la demande de l'API de récupération et la réponse en Javascript. Par exemple: Avant d'envoyer la requête, vous voulez intercepter l'URL de la requête et une fois que la réponse veut intercepter la réponse.Intercepter Fetch() réponses API et demande en Javascript

Le code ci-dessous est pour intercepter la réponse de toutes les XMLHTTPRequest.

(function(open) { 
XMLHttpRequest.prototype.open = function(XMLHttpRequest) { 
    var self = this; 
    this.addEventListener("readystatechange", function() { 
     if (this.responseText.length > 0 && this.readyState == 4 && this.responseURL.indexOf('www.google.com') >= 0) { 
      Object.defineProperty(self, 'response', { 
       get: function() { return bValue; }, 
       set: function(newValue) { bValue = newValue; }, 
       enumerable: true, 
       configurable: true 
      }); 
      self.response = 'updated value' //Intercepted Value 
     } 
    }, false); 
    open.apply(this, arguments); 
}; 
})(XMLHttpRequest.prototype.open); 

Je souhaite implémenter la même fonctionnalité pour l'API Fetch().

Merci à l'avance ..

+0

On dirait que vous voulez pirater l'interface Window.Request https://fetch.spec.whatwg.org/#request https://developer.mozilla.org/en-US/docs/Web/API/Demande de faire quelque chose de similaire à ce que vous avez fait dans l'exemple de code dans la question. Personnellement, je ne peux pas offrir plus de conseils spécifiques, en disant que c'est là que vous voudriez probablement commencer à expérimenter – sideshowbarker

+0

Y at-il un moyen de détecter tous les appels réussis callback de l'appel de l'API de récupération? Par exemple: $ (document) .ajaxSuccess (fonction (événement, xhr, paramètres) { }); –

+0

Le seul moyen que vous avez pour vérifier l'état de la réponse est de vérifier l'attribut 'ok' de l'objet de réponse https://developer.mozilla.org/en-US/docs/Web/API/Response/ok:' fetch (someURL) .then (fonction (réponse) {if (response.ok) {/ * faire quelque chose * /} ' – sideshowbarker

Répondre

2

Pour intercepter la requête d'extraction et d'intercepter le paramètre de demande d'extraction nous pouvons aller en dessous mentionnés. Il a résolu mon problème.

const constantMock = window.fetch; 
window.fetch = function() { 
    // Get the parameter in arguments 
    // Intercept the parameter here 
    return constantMock.apply(this, arguments) 
}