|
You last visited: Today at 23:28
Advertisement
jQuery request.done keine überspeicherung
Discussion on jQuery request.done keine überspeicherung within the Web Development forum part of the Coders Den category.
05/17/2013, 17:25
|
#1
|
elite*gold: 0
Join Date: Jan 2010
Posts: 13,150
Received Thanks: 3,206
|
jQuery request.done keine überspeicherung
Hallo Leute,
da ich mich nach langem wieder an mein CMS gesetzt habe und nun per jQuery einen request durchlaufen lasse, diesen aber nicht richtig bearbeiten kann brauch ich eure Hilfe.
Folgendermaßen ich habe nun erstmal 2 Dateien Collection.php & Save_Col.php
Collection.php:
PHP Code:
var request = $.post('controller/Save_Col.php', { data: dataToSend } );
var test = "TestString";
request.done(function(jsonArray){
var requestData = JSON.parse(jsonArray);
test = requestData.msg;
console.log("TestVariable_Done: " + test); //MsgString
});
console.log("TestVariable: " + test); //TestString sollte jedoch MsgString sein
So nun die Frage, ich überspeichere doch die test var im .done block warum erhalte ich nach dem Block jedoch wieder die unveränderte variable?
|
|
|
05/17/2013, 17:52
|
#2
|
elite*gold: 0
Join Date: Apr 2013
Posts: 45
Received Thanks: 12
|
Hey,
du befindest dich in einer Funktion
Code:
function(jsonArray)
Wie war das nochmal mit dem Scope von Variablen? Wenn ichs richtig im Kopf hab ists wie in PHP: in Funktionen definierte Variablen gelten ausserhalb dieser nicht, genauso sind alle ausserhalb definierten Variabeln (sofern es keine Globals sind) nicht vorhanden. Ich glaub, damit hab ich dein Problem gelöst oder? 
lg
|
|
|
05/17/2013, 17:57
|
#3
|
elite*gold: 0
Join Date: Dec 2007
Posts: 322
Received Thanks: 98
|
Das klingt nach einem typischen Denkfehler beim Umgang mit asynchronen Funktionen:
request.done() wird erst aufgerufen, nachdem
Code:
console.log("TestVariable: " + test);
ausgegeben wurde. Somit ergibt sich die Situation:
"TestVariable: TestString"
"TestVariable_Done: ..."
@Cooltek:
Das ist nicht ganz richtig: In Javascript gelten selbst mit "var" im globalen Kontext definierte Variable als globale Variable und sind sehr wohl  .
|
|
|
05/17/2013, 18:04
|
#4
|
elite*gold: 0
Join Date: Jan 2010
Posts: 13,150
Received Thanks: 3,206
|
Quote:
Originally Posted by mydoom
Das klingt nach einem typischen Denkfehler beim Umgang mit asynchronen Funktionen:
request.done() wird erst aufgerufen, nachdem
Code:
console.log("TestVariable: " + test);
ausgegeben wurde. Somit ergibt sich die Situation:
"TestVariable: TestString"
"TestVariable_Done: ..."
@Cooltek:
Das ist nicht ganz richtig: In Javascript gelten selbst mit "var" definierte Variable im globalen Kontext als globale Variable und sind sehr wohl in der Funktion verfügbar.
|
Da scheint der Fehler zu liegen.
Dort wo
PHP Code:
console.log("TestVariable: " + test);
steht, steht aber normalerweiße ein da es die Value des jEditable in eine Zelle der Tabelle schreibt.
Allerdings will ich die Value vorher durch das .done abfragen und dann erst eintragen, nur weiß ich nun nicht, wie ich da vorgehen sollte.
|
|
|
05/17/2013, 18:17
|
#5
|
elite*gold: 0
Join Date: Dec 2007
Posts: 322
Received Thanks: 98
|
Quote:
Originally Posted by Ravenstorm
Dort wo
PHP Code:
console.log("TestVariable: " + test);
steht, steht aber normalerweiße ein
|
Das ergibt für mich keinen Sinn, da dort quasi immer "TestString" zurückgegeben werden sollte.
// Oder null undefined wenn value gar nicht definiert wurde.
|
|
|
05/17/2013, 18:32
|
#6
|
elite*gold: 0
Join Date: Jan 2010
Posts: 13,150
Received Thanks: 3,206
|
Quote:
Originally Posted by mydoom
Das ergibt für mich keinen Sinn, da dort quasi immer "TestString" zurückgegeben werden sollte.
// Oder null undefined wenn value gar nicht definiert wurde.
|
Du kannst es auch als
sehen. Somit macht es für dich vielleicht mehr Sinn.
|
|
|
05/17/2013, 18:54
|
#7
|
elite*gold: 0
Join Date: Dec 2007
Posts: 322
Received Thanks: 98
|
Nicht wirklich, da $.post nur ein Alias für
Code:
$.ajax({
type: "POST",
url: url,
data: data,
success: success,
dataType: dataType
});
also einer AJAX-Funktion von jQuery ist. Und die haben die nette Eigenschaft asynchron zu sein:
Quote:
|
Originally Posted by http://api.jquery.com/jQuery.ajax/
The first letter in Ajax stands for "asynchronous," meaning that the operation occurs in parallel and the order of completion is not guaranteed. The async option to $.ajax() defaults to true, indicating that code execution can continue after the request is made.
|
Du kannst also gar nicht davon ausgehen, dass der Request abgeschlossen und Daten zurückgekommen sind, nur weil die Anweisung im Code nach der Callback-Funktion steht.
|
|
|
05/17/2013, 19:08
|
#8
|
elite*gold: 0
Join Date: Apr 2005
Posts: 323
Received Thanks: 114
|
Setz das async flag auf false.
|
|
|
05/17/2013, 19:21
|
#9
|
elite*gold: 0
Join Date: Dec 2007
Posts: 322
Received Thanks: 98
|
Quote:
Originally Posted by MrPuschel
Setz das async flag auf false.

|
Quote:
|
Originally Posted by http://api.jquery.com/jQuery.ajax/
Setting this option to false (and thus making the call no longer asynchronous) is strongly discouraged, as it can cause the browser to become unresponsive.
|
//Edit:
Quote:
|
Originally Posted by http://api.jquery.com/jQuery.ajax/
Note that synchronous requests may temporarily lock the browser, disabling any actions while the request is active.
|
|
|
|
05/17/2013, 19:41
|
#10
|
elite*gold: 0
Join Date: Apr 2005
Posts: 323
Received Thanks: 114
|
Quote:
Originally Posted by mydoom
|
PHP Code:
$.ajax({ type: "POST", url: url, data: data, success: success, dataType: dataType, async: false });
Mit dem setting async auf false wird der request nicht asynchron ausgeführt.
|
|
|
05/17/2013, 19:53
|
#11
|
elite*gold: 0
Join Date: Dec 2007
Posts: 322
Received Thanks: 98
|
Das ist mir schon klar. Ich habe die Dokumentation gelesen und oben zitiert weshalb das keine gute Idee ist.
|
|
|
05/17/2013, 20:28
|
#12
|
elite*gold: 0
Join Date: Apr 2005
Posts: 323
Received Thanks: 114
|
Quote:
Originally Posted by mydoom
Das ist mir schon klar. Ich habe die Dokumentation gelesen und oben zitiert weshalb das keine gute Idee ist.
|
Und das passiert warum?
|
|
|
05/17/2013, 20:54
|
#13
|
elite*gold: 0
Join Date: Dec 2007
Posts: 322
Received Thanks: 98
|
Weil Javascript im UI-Thread läuft.
|
|
|
05/17/2013, 21:45
|
#14
|
elite*gold: 0
Join Date: Apr 2005
Posts: 323
Received Thanks: 114
|
Quote:
Originally Posted by mydoom
Weil Javascript im UI-Thread läuft.
|
Da mach dir mal keine Sorgen. Die JavaScript Engine läuft in ihrem eigenen thread und legt den UI thread sicher nicht schlafen. In der jquery Implementation bedeutet das async flag nur das die Rückgabe nicht als callback läuft sondern prozedural abläuft.
Es wird also auf eine Rückgabe gewartet. Das schlimmste was dir passieren kann ist, das du auf einen timeout warten musst wenn das Ziel nicht erreichbar ist. Es ist kein gutes Design synchrone requests abzusetzen, manchmal jedoch Notwendig und ganz sicher schießt es deinen Browser nicht ohne Grund ab.
|
|
|
05/17/2013, 21:54
|
#15
|
elite*gold: 0
Join Date: Dec 2007
Posts: 322
Received Thanks: 98
|
Du kannst ja mal zum Spaß ne Endlosschleife in js starten und dir ansehen was passiert. Warum sollte man nicht einfach alles in der Callback-Funktion bearbeiten?
|
|
|
 |
|
Similar Threads
|
jquery Tab Menü Problem
12/17/2012 - Web Development - 2 Replies
Hallo epvp,
habe ein Problem mit einem jquery tab script was ich aus einer alten webseite von mir kopiert habe. Das Script funktioniert soweit, aber bei jedem klick auf die Tabs ändert sich die Url und #tab2 zb steht hinten dran. Das ist soweit auch okay, nur verändert sich auch der Bildausschnitt. Bedeutet, man sieht nichtmehr alles sondern nurnoch den Teil ab den Tabs.
Hoffe das war verständlich.. wie sorg ich dafür dass nicht immer an diesen Punkt gesprungen wird?
<script...
|
jQuery Problem?!
09/08/2012 - Web Development - 4 Replies
Hallo,
also ich möchte nun ein bisschen jQuery ausprobieren.
Mit Firebug funktioniert alles hervorragend. Nun möchte ich das
in eine .js Datei schreiben. Bloss es wird nicht ausgeführt.
Erstmal habe ich jQuery richtig eingebunden:
<script src="http://code.jquery.com/jquery-1.8.1.min. js"></script>
Und die .js Datei habe ich folgend eingefügt:
|
JQuery Problem
04/19/2012 - Web Development - 4 Replies
Moin,
also es geht primär um dieses Beispiel:
$("#arrow-top").wrap('<a href="#" onclick="getMap(\'Top\');"></a> ');
Wenns ichs am PC teste (mit XAMPP) funktioniert es einwandfrei. Wenn ich es aber aufn Server lade, gehts nicht mehr, also er wrap'ed das Bild nicht mehr.
Alles andere funktioniert sonst einwandfrei, nur eben das nicht.
|
jquery Problem
04/17/2012 - Web Development - 2 Replies
Hey Leute!
Ich bin gerade dabei mir eine kleine Slideshow mittels Jquery zu basteln und nach tausenden versuchen scheint es einfach nicht zu funktionieren.
Hoffe ihr könnt mir helfen :)
$(document).ready(function() {
$("#slide1").hover(
function () {
|
JQuery -JSON
11/28/2011 - General Coding - 0 Replies
Hey, mein Freund hat ein Problem und ich wollte mal wissen, ob ihr da helfen könnt?
Die Fragestellung ist sehr kurz und ich persönlich kann damit nichts anfangen , aber hier die Frage:
Wie krieg ich beim Fullcalendar in JQuery nen Datensatz per JSON rein?
|
All times are GMT +1. The time now is 23:30.
|
|