jQuery $ .getJSON funktioniert nur einmal für jedes Steuerelement. Erreicht den Server nicht erneut

8

Zuerst mein Code

%Vor%

Ich habe eine Reihe von Schaltflächen mit Code, die einige Abstimmungsergebnisse von einer ASP.Net MVC-Controller-Aktion bringen.

Dies funktioniert gut, wenn Sie zum ersten Mal auf die Schaltfläche klicken, aber wenn erneut geklickt wird, passiert nichts. Nichts erreicht den Server.

Ich teste auf FireFox.

Was läuft falsch? Eine Art seltsames Caching? Da die Anfrage das zweite Mal nie den Controller erreicht, scheint das JavaScript in Ordnung zu sein, aber es gibt immer die alten Werte zurück.

    
Cyril Gupta 28.08.2009, 06:07
quelle

4 Antworten

18

Klingt wie ein Browser-Cache-Problem (wenn ich mir ziemlich sicher bin, dass das mit IE passiert), möchten Sie vielleicht $. ajax und setzen Sie die Cache-Option auf" false ", da sie standardmäßig nur für dataType script und jsonp : false ist:

%Vor%

Alternativ können Sie diese Option global für alle jQuery Ajax-Funktionen festlegen, indem Sie vor der Verwendung $ .ajaxSetup verwenden $ .getJSON:

%Vor%

Bearbeiten: Sie können eine POST-Anfrage machen, die JSON wie folgt zurückgibt:

%Vor%

Wenn Sie viele postJSON -Anfragen durchführen möchten, können Sie eine eigene Funktion erstellen:

%Vor%

Und Sie können es genauso verwenden wie $ .getJSON

    
CMS 28.08.2009, 06:34
quelle
2
___ qstntxt ___

Zuerst mein Code

%Vor%

Ich habe eine Reihe von Schaltflächen mit Code, die einige Abstimmungsergebnisse von einer ASP.Net MVC-Controller-Aktion bringen.

Dies funktioniert gut, wenn Sie zum ersten Mal auf die Schaltfläche klicken, aber wenn erneut geklickt wird, passiert nichts. Nichts erreicht den Server.

Ich teste auf FireFox.

Was läuft falsch? Eine Art seltsames Caching? Da die Anfrage das zweite Mal nie den Controller erreicht, scheint das JavaScript in Ordnung zu sein, aber es gibt immer die alten Werte zurück.

    
___ qstnhdr ___ jQuery $ .getJSON funktioniert nur einmal für jedes Steuerelement. Erreicht den Server nicht erneut ___ tag123javascript ___ JavaScript (nicht zu verwechseln mit Java) ist eine dynamische Sprache mit mehreren Paradigmen auf hoher Ebene, die sowohl für das clientseitige als auch für das serverseitige Scripting verwendet wird. Verwenden Sie dieses Tag für Fragen zu ECMAScript und seinen verschiedenen Dialekten / Implementierungen (außer ActionScript und Google-Apps-Script). ___ answer1345352 ___

Klingt wie ein Browser-Cache-Problem (wenn ich mir ziemlich sicher bin, dass das mit IE passiert), möchten Sie vielleicht $. ajax und setzen Sie die Cache-Option auf" false ", da sie standardmäßig nur für dataType %code% und %code% : false ist:

%Vor%

Alternativ können Sie diese Option global für alle jQuery Ajax-Funktionen festlegen, indem Sie vor der Verwendung $ .ajaxSetup verwenden $ .getJSON:

%Vor%

Bearbeiten: Sie können eine POST-Anfrage machen, die JSON wie folgt zurückgibt:

%Vor%

Wenn Sie viele postJSON -Anfragen durchführen möchten, können Sie eine eigene Funktion erstellen:

%Vor%

Und Sie können es genauso verwenden wie $ .getJSON

    
___ tag123jquery ___ jQuery ist eine beliebte Cross-Browser-JavaScript-Bibliothek, die das DOM-Traversal (Document Object Model), die Ereignisbehandlung, Animationen und AJAX-Interaktionen erleichtert, indem die Diskrepanzen zwischen Browsern minimiert werden. Eine mit jQuery gekennzeichnete Frage sollte mit jQuery in Zusammenhang stehen, daher sollte jquery von dem fraglichen Code verwendet werden, und mindestens eine jquery-nutzungsbezogene Elemente müssen in der Frage enthalten sein. ___ tag123aspnetmvc ___ Das ASP.NET MVC Framework ist ein Open-Source-Webanwendungs-Framework und -Tooling, das eine auf Web-Anwendungen zugeschnittene Version des Model-View-Controller (MVC) -Musters implementiert und auf einer ASP.NET-Technologiegrundlage aufbaut. ___ tag123json ___ JSON (JavaScript Object Notation) ist ein Textdatenaustauschformat und sprachunabhängig. Verwenden Sie dieses Tag, wenn dieses Textformat beteiligt ist. VERWENDEN SIE DIESEN TAG NICHT FÜR NATIVE JAVASCRIPT-OBJEKTE ODER JAVASCRIPT OBJECT LITERALS. Bevor Sie eine Frage stellen, wenn Sie glauben, dass Ihr JSON gültig ist, überprüfen Sie diese bitte in einem JSON-Validator wie JSONLint, damit Ihre Frage beantwortet wird, bevor Sie sie überhaupt stellen. ___ answer1345524 ___

Sie können dasselbe auch mit der GET-Anfrage machen, fügen Sie einfach einen Zeitstempel am Ende der Anfrage hinzu, siehe zum Beispiel die folgende Beispielanfrage

Ссылка _timestamp = 1234421352

Auf diese Weise speichert der Browser Ihre Anfragen niemals, da sich die URL bei jedem Anruf ändert. Sie können den Zeitstempel von Javascript leicht erhalten. Außerdem müssen Sie diesen Zeitstempel nicht auf Ihrer Serverseite behandeln, aber dies liegt in Ihrem Ermessen.

    
___ answer6151395 ___

Ja, %code% löst das Problem! Meine Anwendung ist mit MVC 2. Der Code ist wie folgt:

%Vor%     
___
Marc Gravell 28.08.2009 06:13
quelle
2

Ja, $.ajaxSetup({ cache: false }); löst das Problem! Meine Anwendung ist mit MVC 2. Der Code ist wie folgt:

%Vor%     
user477864 27.05.2011 11:10
quelle
0

Sie können dasselbe auch mit der GET-Anfrage machen, fügen Sie einfach einen Zeitstempel am Ende der Anfrage hinzu, siehe zum Beispiel die folgende Beispielanfrage

Ссылка _timestamp = 1234421352

Auf diese Weise speichert der Browser Ihre Anfragen niemals, da sich die URL bei jedem Anruf ändert. Sie können den Zeitstempel von Javascript leicht erhalten. Außerdem müssen Sie diesen Zeitstempel nicht auf Ihrer Serverseite behandeln, aber dies liegt in Ihrem Ermessen.

    
moha297 28.08.2009 07:22
quelle