na ajax seccess is de variabele niet globaal meer

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Daniel van Seggelen

Daniel van Seggelen

06/06/2021 19:53:12
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
var filters;
var addressPoints;                        


function ajaxCallBack(wtt){ console.log(wtt);
            addressPoints = wtt.arr; // alle coordinaten in lng/lat
            filters = wtt.filter; // alle filterselecties array
}    


De ajax word hier geladen:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
jQuery.ajax({
                type: "GET",
                url: "<?=HTML_ROOT?>inc/leaf_ajax.php
                contentType: "application/json",
                dataType: "json",
                 async: true,
                crossDomain: true,
                success: function (wtt) {
                 ajaxCallBack(wtt);

                },
                 error:function (xhr, ajaxOptions, thrownError){
                   console.log(xhr.status); //throw any errors
                }    
        
            });// end ajax
    

var a;
                        var customOptions =
                        {
                        'maxWidth': '500',
                        'className' : 'custom'
                        }
                        for (var i = 0; i < addressPoints.length; i++) {
                            a = addressPoints[i];
                            var popup = a[2];
                            var title = a[3];
                            var decoded = $("<div/>").html(popup).text();                            
                            marker = L.marker(new L.LatLng(a[0], a[1]), { title: title });
                            marker.bindPopup(decoded,customOptions);
                            markers.addLayer(marker);                
                            marker.on("click", function(e) {                
                                common(e.latlng.lat, e.latlng.lng);            
                            });
                        }
                        


Ik krijg dan
Quote:
Uncaught TypeError: Cannot read property 'length' of undefined


en verwijst naar deze regel:
for (var i = 0; i < addressPoints.length; i++) {

addressPoints is bovenaan als var gedefinieerd.
De console.log in ajaxCallBack geeft de juiste return, maar ik kan hem dus buiten de success om niet meer gebruiken, want hij word dan undefined.

Binnen de success tag werkt hij wel, maar ik moet hem ook daarbuiten kunnen gebruiken. Deze waardes zijn niet global meer.

Het had met asynch te maken, als ik hem op false zet, dus dat hij synchroon word, dan duurt het te lang om in mijn geval de leafles map te maken.

Maar als ik nu in de callback functie de addressPoints loop laat draaien, dan werkt het wel, maar omdat je ajax nog niet klaar is doordat hij niet synchroon loopt krijg ik:

Quote:
caught TypeError: Cannot read property '_latLngToNewLayerPoint' of null
at NewClass._animateZoom (leaflet-min.js:3)


Hoe kan dit het beste opgelost worden?
Gewijzigd op 06/06/2021 20:30:50 door Daniel van Seggelen
 
Er zijn nog geen reacties op dit bericht.



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.