2010-01-10 7 views
6

Ich habe ein kleines Problem mit meiner Website. Ich habe eine Seite, die eine Google Map enthält. Die Karte wird jedoch erst angezeigt, wenn der Benutzer auf eine Schaltfläche klickt. Es ruft dann $ .getJSON die Adressen zu bekommen, die ich auf der Karte zeigen muß ...

$.getJSON(theurl, function(json) { 
    ... 
} 

Es funktioniert alles gut. Wenn der Benutzer jedoch auf eine andere Seite wechselt und dann auf die Schaltfläche Zurück klickt, werden die Daten aus dem Aufruf $ .getJSON angezeigt, nicht die Seite selbst.

Es ist, als ob der Aufruf zum Abrufen der Adressen Teil des Browserverlaufs geworden ist. Wenn der Benutzer auf die Aktualisierung klickt, wenn die Daten angezeigt werden, wird die gesamte Seite angezeigt.

Kann mir jemand sagen, wie man das verhindern kann.

Ich verwende die Google Map in einer ASP.Net MVC-Site.

Dank

+0

‚?‘. Ändern Sie die Geschichte des Browsers? –

+0

Können Sie eine Demo? – SLaks

+1

Ist die URL die gleiche wie die Seite? (Dh, zwischen HTML und Json je nachdem, ob die Anfrage als xhr gilt) – meandmycode

Antwort

10

ich es gelöst, indem Sie den Code unten kurz vor dem $ Schnipsel Funktion

$ .ajaxSetup ({Cache: false}) enthält;

Es funktioniert! Versuchen Sie es

+2

Dieser Aufruf ändert das Verhalten aller Aufrufe von Ajax auf der Seite. Dies könnte zu einem sehr verwirrenden Verhalten führen, wenn Sie sich dessen nicht bewusst sind. – Wheeyls

4

Das ist für mich gearbeitet und spielt gut mit Rails-Controller:

$.getJSON(url, {format: 'json'}, successHandler); 

Als Bonus ich den Cache zu halten bekommen.

Ich bin mir ziemlich sicher, dass dies aus dem gleichen Grund funktioniert, dass cache: false funktioniert - beide fügen einen Parameter zur URL hinzu, so dass Chrome nicht durch den Ursprung verwirrt wird. In diesem Fall, obwohl ich die Ergebnisse zwischenspeichern kann, ist das nett.

3

Dies ist eigentlich a bug in Chrome. Ich habe es behoben, indem ich etwas an die URL des AJAX-Aufrufs angehängt habe, so dass es sich von der Seiten-URL unterscheidet (z. B. "& ajax = true").

in Ihrem Fall So würde es wie folgt aussehen:

$.getJSON(theurl + '&ajax=true', function(json) { 
    ... 
} 

(Und natürlich müssen Sie für überprüfen und was nicht in der Abfragezeichenfolgeflag, aber dies stellt den Punkt

+0

das hat nicht für mich funktioniert –

+0

wheeyls Antwort arbeitete für mich http://Stackoverflow.com/a/12427812/1852292 –

Verwandte Themen