jQuery.ajaxSetup({async:false});

Κώδικας, πληροφορίες, ερωτήσεις και απαντήσεις σχετικές με την JavaScript.

Συντονιστές: WebDev Moderators, Super-Moderators

Απάντηση
Άβαταρ μέλους
philos
Δημοσιεύσεις: 260
Εγγραφή: 30 Αύγ 2007 23:32

jQuery.ajaxSetup({async:false});

Δημοσίευση από philos » 13 Ιουν 2015 17:06

Καλησπέρα σε όλους!

Λοιπόν, αντιμετώπιζα ένα πρόβλημα τον ακόλουθο κώδικα (σας παραθέτω τμήμα):

Κώδικας: Επιλογή όλων

$(document).ready(function() {
	var mapCenter = new google.maps.LatLng({vb:raw vboptions.sc_locations_map_center_lat}, {vb:raw vboptions.sc_locations_map_center_lng}); 
  var markers = [];  
	map_initialize(); 

	//############### Google Map Initialize ##############
	function map_initialize()
	{
      //[...]

			$.get("{vb:raw vboptions.bburl}/ajax.php?do=getmarkers", function (data) {
				$(data).find("marker").each(function () {
					  var point 	= new google.maps.LatLng(parseFloat($(this).attr('lat')),parseFloat($(this).attr('lng')));                 
            var scmarker = new google.maps.Marker({position: point, icon: '{vb:raw vboptions.bburl}/images/googlemap/pin_blue.png'});
            //[...]
            markers.push(scmarker); 	
        });


			});	
			 //[...]
        var markerCluster = new MarkerClusterer(map, markers);  										
	}     
});
Το πρόβλημα ήταν/είναι ότι ο πίνακας markers μετά το φόρτωμα της σελίδας, ήταν άδειος.
Διαβάζοντας διάφορα μηνύματα στο διαδίκτυο, κατάλαβα ότι έχει να κάνει με την async ή sync λειτουργία της AJAX/JavaScript.
Πράγματι όταν έβαλα ένα alert(), αν θυμάμαι καλά μετά την each παραπάνω, δούλεψε, όμως δεν μπορούσα να εκδόσω ένα script που κάνει alert.
Έτσι έβαλα πάνω πάνω ένα:

Κώδικας: Επιλογή όλων

jQuery.ajaxSetup({async:false});
.. και το script λειτουργεί κανονικά τώρα.

Οι ερωτήσεις μου:
1. Τι σημαίνει πρακτικά το να αλλάζεις αυτή την παράμετρο της AJAX; Σε ποιες περιπτώσεις μπορεί να κάνει ένα script δυσλειτουργικό;
2. Εφόσον δεν είναι ορθή η χρήση του παραπάνω, τι μπορώ να βάλω στον κώδικα ώστε να τρέξει σωστά; Κάτι για callback διάβασα, αλλά δεν ξέρω πως να το κάνω (τα παραδείγματα με callback functions που διάβασα είχαν μέσα, για λόγους που δεν καταλαβαίνω, μια alert() (= ασφαλώς κι εμένα δεν με ενδιαφέρει κάτι τέτοιο).

:pint:

alou
Script Master
Δημοσιεύσεις: 1374
Εγγραφή: 24 Αύγ 2007 19:52
Επικοινωνία:

jQuery.ajaxSetup({async:false});

Δημοσίευση από alou » 15 Ιουν 2015 17:07

Σε πρόσβατες εκδόσεις jQuery ειναι deprecated, δεν χρησιμοποιείται δηλαδή. Σε παλιότερες, σε κάθε περίπτωση θα μπορούσε να κάνει το script να κρεμάσει μια τιμή false και μια καθυστερημένη απάντηση. Πρακτικά, με το async:false μπλόκαρες τη λειτουργία του browser μέχρι να έρθει κάποια απάντηση, ενώ αυτά κανονικά λειτουργούν ασύγχρονα (non blocking).

Το callback είναι κάτι που θα εκτελεστεί μόλις ολοκληρωθεί κάποιο ασύγχρονο κομμάτι του script, στη συγκεκριμένη περίπτωση το ajax request.

Όλα αυτά έχουν φτάσει σε ένα σημείο που το μόνο που πρέπει να μάθεις πολύ καλά εφόσον σε ενδιαφέρει η javascript, είνται το τι είναι τα promises και τις προδιαγραφές τους
https://promisesaplus.com/

Η τάση είναι να μη χρησιμοποιείται τίποτα άλλο εκτός από promises (ούτε callbacks, βλ. pyramid of doom) σε αυτές τις περιπτώσεις.

Επίσης, καλό είναι να απεξαρτηθούμε από τη χρήση jQuery για τα πάντα.

Απάντηση

Επιστροφή στο “JavaScript και Frameworks”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 2 επισκέπτες