nik324 Δημοσ. 28 Μαΐου 2015 Δημοσ. 28 Μαΐου 2015 Μπορώ με κάποιον τρόπο, αμέσως μετά την ολοκλήρωση της εκτέλεσης του παρακάτω κώδικα να εκτελέσω μια καθαρά JS συνάρτηση; $(document).ready(function(){ $("#my_button").click(function(event){ var $string = $("#string").val(); $.get('ActionServlet', { string: $string, },function(responseJSON) { $.each(responseJSON, function(key, value) { // εστω ότι σε αυτό το σημείο "γεμίζει" ένας πίνακας }); }); }); }); Έστω ότι σε αυτό το σημείο γεμίζει ένας πίνακας. Ο οποίος θα ήθελα να υποστεί μια επεξεργασία μετά αφού ολοκληρωθεί το γέμισμα του, από μία JS συνάρτηση. Πως μπορεί να γίνει αυτό;
nucleus Δημοσ. 28 Μαΐου 2015 Δημοσ. 28 Μαΐου 2015 https://api.jquery.com/jquery.get/ Διαβάζεις για την callback function success. Αυτή εκτελείται αν το ajax request έγινε επιτυχώς,δεν υπάρχει error code. Υπάρχει αντίστοιχη callback function όταν γίνει κάποιο error στο ajax request. Και τέλος υπάρχει και callback function που εκτελείται όταν ολοκληρωθεί το ajax request ανεξάρτητα από το αν ήταν επιτυχές ή όχι
nik324 Δημοσ. 29 Μαΐου 2015 Μέλος Δημοσ. 29 Μαΐου 2015 (επεξεργασμένο) $(document).ready(function(){ $("#my_button").click(function(event){ var $param1 = $("#field1").val(); $.get('ActionServlet', { param1 : $param1 },function(response) { $.each(response, function(key, value) { myFunction(value, function(returnValue){ alert("FIRST");; }); }); }).done(function(){ alert("SECOND"); }); }); }); Αυτό που θέλω είναι να γίνουν με την σωστή σειρά τα alert();, όμως στην μορφή που είναι τώρα ο κώδικας, τα alert γίνονται με την σειρά alert("SECOND"); και μετά alert("FIRST"); Επεξ/σία 29 Μαΐου 2015 από nik324
παπι Δημοσ. 29 Μαΐου 2015 Δημοσ. 29 Μαΐου 2015 $(document).ready(function(){ $("#my_button").click(function(event){ var $param1 = $("#field1").val(); $.get('ActionServlet', { param1 : $param1 },function(response) { $.each(response, function(key, value) { myFunction(value, function(returnValue){ alert("FIRST");; }); }); alert("SECOND"); }).done(function(){ }); }); }); Αυτό που θέλω είναι να γίνουν με την σωστή σειρά τα alert();, όμως στην μορφή που είναι τώρα ο κώδικας, τα alert γίνονται με την σειρά alert("SECOND"); και μετά alert("FIRST");
nik324 Δημοσ. 29 Μαΐου 2015 Μέλος Δημοσ. 29 Μαΐου 2015 Οχι, και πάλι το second alert εκτελείται πρώτο
nucleus Δημοσ. 29 Μαΐου 2015 Δημοσ. 29 Μαΐου 2015 Για δοκίμασε μια να κάνεις το done always. Παίζει σωστά?
defacer Δημοσ. 4 Ιουνίου 2015 Δημοσ. 4 Ιουνίου 2015 Δεν χρειάζεται να μπερδεύεσαι έτσι βάζοντας το success callback μέσα στη $.get, μπορείς απλά να εκμεταλλευτείς το γεγονός ότι επιστρέφει promise (όπως ήδη κάνεις εν μέρει) και να απλοποιήσεις πολύ τα πράγματα φτιάχνοντάς τα ταυτόχρονα: $(document).ready(function(){ $("#my_button").click(function(event) { var $param1 = $("#field1").val(); function onSuccess1(response) { $.each(response, function(key, value) { myFunction(value, function(returnValue){ alert("FIRST");; }); } function onSuccess2() { alert("SECOND"); } $.get('ActionServlet', { param1 : $param1 }) .done(onSuccess1) .done(onSuccess2); }); }); Άλλαξα λίγο τη δομή για να είναι πιο ξεκάθαρο τι συμβαίνει. Επίσης δεν είναι ξεκάθαρο τι γίνεται εκεί μέσα με τη myFunction -- υπάρχει περίπτωση να θέλεις κάτι άλλο που επίσης γίνεται αλλά δεν το κατάλαβα από αυτή τη διατύπωση. Υπόψιν ότι το έγραψα έτσι γιατί μπορείς να βάλεις την onSuccess2 μετά την onSuccess1 και σε τελείως άλλο κομμάτι του κώδικα. Αν όμως τις έχεις στα χέρια σου όλες εκείνη τη στιγμή όπως παραπάνω τότε μπορείς απλά να γράψεις .done(onSuccess1, onSuccess2);
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα