Question Découvrez où la requête ajax Jquery est redirigée vers


J'ai donc cette requête ajax, voir-. Blonde, environ 6 pieds de haut, ressemble à ceci:

$.ajax({
    url: 'http://example.com/makeThing',
    dataType: 'html',
    type: 'POST',
    data: {
        something:someotherthing
    },
    complete: function(request, status) {
        console.log("headers=" + request.getAllResponseHeaders(););
    }
});

Qu'est-ce qui se passe est que la demande à '/ makeThing' retourne une redirection 302 vers une seconde URL: 'getThing / abc123'. Tout ce que je veux faire, c'est de savoir ce que cette seconde URL est (par programmation, ce sera différent à chaque fois, alors vérifier l'archive ne m'aide pas). J'ai essayé de plomber les en-têtes de réponse qui reviennent au rappel «complet», mais cela me donne juste ce qui est revenu sur la deuxième demande.

Contraintes: -Je n'ai aucun contrôle sur le serveur sur lequel il s'exécute uniquement sur les js. -Peut changer de framework si je le dois (dojo? Prototype?)

Idéalement, je ferais une sorte de demande d'en-tête uniquement à / makeThing pour savoir ce qu'est l'URL de redirection en obtenant uniquement les en-têtes de la réponse 302 initiale.

Faute de quoi (puisque jquery suit automatiquement les redirections et ne semble pas avoir la possibilité de passer entre les requêtes), je récupère la réponse finale et l'utilise pour obtenir l'url de quelque chose? L'objet de requête, peut-être?

TLDR: Envoi d'une requête ajax. Framework suit automatiquement la redirection 302 résultante. Comment puis-je savoir où il est redirigé?

EDIT, Clarification: L'URL finale sera différente à chaque fois que l'appel de "makeThing" amènera le serveur à créer ce qui sera ensuite hébergé à "getThing / abc123".


11
2017-07-08 01:48


origine


Réponses:


Si possible, demandez à votre serveur de définir un en-tête sur ces pages (les pages de destination, pas la page de redirection), par exemple définir un "current-location" en-tête, alors vous pouvez le faire:

$.ajax({
    url: 'http://example.com/makeThing',
    dataType: 'html',
    type: 'POST',
    data: {
        something:someotherthing
    },
    complete: function(request, status) {
        var location = request.getResponseHeader("current-location");
    }
});

Oui ca est un peu de piratage, mais comme la redirection est gérée en interne dans l'objet XmlHttpRequest (un événement auquel vous ne pouvez pas accéder), vous n'avez pas beaucoup de choix.

Vous pouvez vérifier les spécifications, c'est le prévu comportement pour XmlHttpRequest:

Si l'origine de l'URL transmise par l'en-tête Location est identique à l'origine XMLHttpRequest et que la redirection ne viole pas les précautions de boucle infinies, suivez de manière transparente la redirection tout en respectant les règles d'événement de demande de même origine.


4
2017-07-08 10:58



Cela peut ne pas aider votre situation particulière, mais quand j'ai eu le même problème, j'ai remarqué que la page sur laquelle je me suis retrouvé après la redirection avait un indice dans le code HTML:

<meta property="og:url" content="THE_URL_OF_THE_PAGE" />

Certaines pages contiennent des extraits de script utilisés pour ajouter des commentaires sur Facebook, et ceux-ci peuvent parfois contenir l'URL actuelle. Ou même de manière aussi flagrante que cela:

<a href="http://www.facebook.com/sharer.php?u=THE_URL_OF_THE_PAGE">

2
2018-06-24 10:42



Pourquoi ne pas simplement brancher l'URL 'http://example.com/makeThing'dans votre navigateur et voyez où vous vous retrouvez?


0
2017-07-08 01:53



Si vous démarrez Firebug, puis ouvrez la console, vous pouvez suivre où la requête se déroule réellement. Lorsque le traitement de la requête AJAX est terminé, développez cet élément de la console et vous verrez les requêtes impliquées et les en-têtes de réponse.


0
2017-07-08 01:54



C'est vraiment dommage que nous ne puissions pas saisir cet en-tête ... mais comme Magnus l'a fait remarquer, vous pouvez essayer de lire un contenu unique sur cette page qui vous permettra de déterminer quelle page a été réellement acheminée vers vous ...


0
2017-10-23 15:52