Frage

Ich habe eine Anwendung, in dem die meisten Anfragen werden über AJAX vorgelegt, obwohl einige über „normale“ HTTP-Anfragen vorgelegt werden. Wenn ein Antrag gestellt wird und die Sitzung des Benutzers abgelaufen ist, wird die folgende JSON zurückgegeben:

{"authentication":"required"}

Die JavaScript-Funktion, die alle AJAX-Anforderungen trägt behandelt diese Reaktion durch eine Popup-Meldung zeigt und die Benutzer zurück auf die Login-Seite umgeleitet werden.

Wenn jedoch eine nicht-AJAX Anforderung diese Antwort empfängt die JSON einfach im Browser angezeigt wird, da die Reaktion durch den Browser direkt verarbeitet wird (d.h. die vorgenannte JavaScript-Funktion umgangen wird). Natürlich ist dies nicht ideal, und ich würde die nicht-AJAX-Anfragen gerne, dass diese Antwort erhält das gleiche wie die AJAX-Anforderungen zu verhalten. Um dies zu erreichen, kann ich 2 Möglichkeiten denken:

  1. Gehen Sie durch die Anwendung und konvertieren alle Anträge auf AJAX-Anforderungen. Dies würde funktionieren, könnte aber auch eine lange Zeit in Anspruch nehmen!

  2. Die JSON oben gezeigt durch eine sehr einfache JSP erzeugt wird. Ich frage mich, ob es möglich sein könnte, einen JavaScript-Event-Handler zu diesen JSP hinzufügen, die gerade ausgeführt wird, bevor der Inhalt im Browser angezeigt wird - ich bin davon aus, dies würde nie für AJAX-Anfragen genannt werden? Dieser Handler konnte den anderen JavaScript-Code aufrufen, um das Popup angezeigt und führt die Umleitung.

Wenn jemand weiß, wie genau ich den Handler implementieren kann ich skizziert habe in (2), oder hat andere potenzielle Lösungen, würde ich sehr dankbar, wenn sie sie weitergeben würden.

Cheers, Don

War es hilfreich?

Lösung

Sie können nicht einen Handler an die JSP auf diese Weise hinzufügen. Alles, was Sie ihm hinzufügen wird es eine nicht-JSON produzieren Seite machen.

Es gibt zwei Optionen, die ich sehen kann: Fügen Sie einen Parameter auf der Seite durch einen URL-Parameter auf dem Bildschirm angehängt, die die Ausgabe ändert.

URL: http: //domain/page.jsp ajaxRequest = true ausgeben würde json nur

URL: http: //domain/page.jsp würde eine jsp Seite anzuzeigen, die auf eine andere Seite weiterleiten können.

oder

die Antwort ändern, um die Weiterleitung Code in der JSP zu haben, die vom Web-Browser ausgeführt wird erhalten, wenn sie direkt getroffen wird. Dann haben Sie Ihre AJAX ruft die Weiterleitung Code auszuziehen, und dann verarbeiten, was übrig ist.

Andere Tipps

3) Ändern Sie AJAX-Code eine Variable zur GET oder POST hinzuzufügen: outputJson=1

4) Lesen Sie auf den 'Übernehmen' Anfrage HTTP-Header auf.

Dann auf der Serverseite Schneider die Ausgabe:

z.

if(Accept contains application/json...) { // client asking for json, likely  to be XHR
  return {"foo":"bar"}
} else { // other
  return "Location: /login-please";
}

Starten Sie mit einer intelligenteren Fehlermeldung, wie folgt aus:

{"error":"authentication required"}

Wickeln Sie die JSON-Ausgabe in einem Rückruf:

errorHandler({"error":"authentication required"});

Haben Sie einen Handler in Ihrem Skript warten:

function errorHandler(r) {
   alert(r.error);
}

Und vergessen Sie nicht, es als text/javascript zu schicken nach unten und nicht application/x-json.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top