Προς το περιεχόμενο

Προτεινόμενες αναρτήσεις

Δημοσ.

Μπορώ με κάποιον τρόπο, αμέσως μετά την ολοκλήρωση της εκτέλεσης του παρακάτω κώδικα να εκτελέσω μια καθαρά 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 συνάρτηση. Πως μπορεί να γίνει αυτό;

Δημοσ.

https://api.jquery.com/jquery.get/

 

Διαβάζεις για την callback function success. Αυτή εκτελείται αν το ajax request έγινε επιτυχώς,δεν υπάρχει error code. Υπάρχει αντίστοιχη callback function όταν γίνει κάποιο error στο ajax request. Και τέλος υπάρχει και callback function που εκτελείται όταν ολοκληρωθεί το ajax request ανεξάρτητα από το αν ήταν επιτυχές ή όχι

Δημοσ. (επεξεργασμένο)
$(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");

Επεξ/σία από nik324
Δημοσ.

 

$(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");

 

Δημοσ.

Δεν χρειάζεται να μπερδεύεσαι έτσι βάζοντας το 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);

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...