2010-07-08 13 views
11

umgeleitet wird So- ich habe diese Ajax-Anfrage, siehe-. Blond, etwa 6 Meter hoch, sieht wie folgt aus:Finden Sie heraus, wo Jquery Ajax Anfrage an

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

Was passiert, ist, dass der Antrag auf ‚/ makeThing‘ liefert ein 302 auf eine zweite URL umleiten: ‚getThing/abc123‘. Alles, was ich tun möchte, ist herauszufinden, was diese zweite URL ist (programmatisch - es wird jedes Mal anders sein, also hilft mir der Check-In von Firebug nicht). Ich habe versucht, die Antwortheader zu plombieren, die zum "vollständigen" Rückruf zurückkommen, aber das gibt mir nur, was bei der zweiten Anfrage zurückkam.

Einschränkungen: -Ich habe keine Kontrolle über den Server, auf dem gerade läuft - nur die js. -Kann Frameworks wechseln, wenn ich muss (Dojo? Prototyp?)

Idealerweise würde ich eine Art Header-only-Anfrage zu/makeThing tun, um herauszufinden, was die Umleitung URL ist, indem Sie nur die Header der anfängliche 302 Antwort.

Failing das (da jquery automatisch folgt Umleitungen und scheint nicht eine Möglichkeit zu haben, zwischen den Anfragen zu treten), bekomme ich die endgültige Antwort abrufen und verwenden Sie es irgendwie die URL von ... etwas zu bekommen? Das Anfrageobjekt, vielleicht?

TLDR: Senden einer Ajax-Anfrage. Framework folgt der resultierenden 302-Weiterleitung automatisch. Wie finde ich heraus, wohin es weitergeleitet wurde?

EDIT, Klarstellung: Die endgültige URL wird jede zeit calling ‚makeThing‘ bewirkt, dass der Server unterschiedlich sein zu schaffen, was danach auf ‚getThing/abc123‘

gehostet wird
+0

Überprüfen Sie es mit Firebug. –

Antwort

0

Warum Sie stecken nicht nur die URL 'http://example.com/makeThing' in Ihren Browser und sehen, wo Sie landen?

+0

Die Weiterleitung hängt möglicherweise von den Daten ab - d. H. Wenn sie gültig ist -> Weiterleitung zur nächsten Seite. Wenn es ungültig ist -> Weiterleitung zur Bearbeitungsseite. Es kann sich auch anders verhalten, wenn es sich um eine XHR anstelle einer regulären Anfrage handelt. Dies ist beispielsweise in Rails nicht ungewöhnlich. –

+0

Wie in meiner Korrektur erwähnt, wird die endgültige URL sehr auf jede Anfrage zu makeThing. makeThing erzeugt ein 'Ding' mit der ID 'abc123', auf das danach bei getThing/abc123 zugegriffen werden kann. Daher muss ich programmatisch auf die Sache zugreifen. – Fishtoaster

0

Wenn Sie Firebug starten, dann öffnen Sie die Konsole, Sie können verfolgen, wohin die Anfrage tatsächlich geht. Wenn Sie sehen, dass die AJAX-Anfrage die Verarbeitung beendet hat, erweitern Sie dieses Konsolenelement und Sie sehen die betroffenen Anfragen und alle Antwortheader.

+0

Tut mir leid, wenn ich nicht besonders klar in diesem Punkt war: makeThing ist eine Generatorfunktion - wo es umgeleitet wird ist jedes Mal anders, wenn es aufgerufen wird, also brauche ich eine Möglichkeit, dies programmgesteuert zu tun. – Fishtoaster

4

Wenn möglich, hat Ihren Server einen Header auf diesen Seiten festgelegt (die Zielseiten, nicht die Umleitung ein), zum Beispiel einen "current-location" Header gesetzt, dann können Sie dies tun:

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

Ja, das ist ein bisschen hacky, aber da die Umleitung intern im XmlHttpRequest-Objekt behandelt wird (ein Ereignis, auf das Sie nicht zugreifen können), haben Sie nicht viel Auswahl.

You can check the spec, ist dies die Verhalten für XmlHttpRequest bestimmt:

Wenn der Ursprung der URL durch den Location-Header übermittelt

gleichen Ursprung mit dem XMLHttpRequest Ursprungs ist und die Umleitung Endlosschleife Vorsichtsmaßnahmen nicht verletzen, folgen Sie der Weiterleitung transparent, während Sie die Regeln für die Ereignisanforderung für denselben Ursprung beobachten.

+1

Das würde funktionieren, wenn ich Zugriff auf den Server hätte. :(Alles, was ich ändern kann, ist Javascript. – Fishtoaster

+2

@Fishtoaster - AFAIK, Sie haben keine Optionen dann, das ist nur nicht verfügbar, zumindest Cross-Browser. Können Sie den Inhalt lesen, um herauszufinden, welche Seite Sie sind auf, oder eine alternative Herangehensweise? –

+0

Das ist wahrscheinlich das, was ich tun muss. Spröde, aber ich denke, das ist alles, was es gibt. – Fishtoaster

2

Dies kann nicht Ihre Situation helfen, aber wenn ich das gleiche Problem hatte, bemerkte ich die Seite, die ich auf endete nach der Umleitung in der HTML Ahnung hatte:

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

Einige Seiten haben Skript Snippets, die zum Hinzufügen von Facebook-Kommentaren verwendet werden, können manchmal auch die aktuelle URL enthalten. Oder auch so eklatant wie folgt aus:

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

Das ist wirklich schade, dass wir nicht, dass die Header greifen ... aber wie Magnus erwähnt, könnten Sie versuchen, einige einzigartige Inhalte von dieser Seite zu lesen, die lassen wird legen Sie fest, welche Seite wurde Ihnen tatsächlich geroutet ...