Question

I have about 15 copies of the following code on my site. The only things changing are the url, longitude, latitude, and the marker variable title. How can I chop this up and reduce the repetition?

$.ajax({
    url: "http://api.wunderground.com/api/<api_key>/conditions/q/pws:KCASANFR128.json",
    dataType: "jsonp",
    success: function(parsed_json) {
    var location = parsed_json['current_observation']['observation_location']['city'];
    var temp_f = parsed_json['current_observation']['temp_f'];
    var weather = parsed_json['current_observation']['weather'].toLowerCase();
    var iconUrl = parsed_json['current_observation']['icon_url'];
    var iconPic = new MyIcon(iconUrl);
    var markerRichmond = new L.Marker(new L.LatLng(37.779806, -122.471895), {icon: iconPic});
    markerRichmond.bindPopup("Current temperature in " +location+ " is: " +temp_f+ " and it is " + weather);
    map.addLayer(markerRichmond);
}});
Was it helpful?

Solution

You could make a function which takes in those variables and feeds them to the ajax call. Then you would only need one copy of this ajax block, which you could call by calling the getWeather function

function getWeather(url, lat, long, title){
    $.ajax({
        url: url,
        dataType: "jsonp",
        success: function(parsed_json) {
            var location = parsed_json['current_observation']['observation_location']['city'];
            var temp_f = parsed_json['current_observation']['temp_f'];
            var weather = parsed_json['current_observation']['weather'].toLowerCase();
            var iconUrl = parsed_json['current_observation']['icon_url'];
            var iconPic = new MyIcon(iconUrl);
            var markerRichmond = new L.Marker(new L.LatLng(lat, long), {icon: iconPic});
            markerRichmond.bindPopup(title);
            map.addLayer(markerRichmond);
        }
    });
}

I am not sure if I handled the title correctly here, but you get the idea. If you give an idea of how the title may change, I can fix the code accordingly.

Hope this helps.

OTHER TIPS

var current_observation = parsed_json['current_observation'];

This also shortens amount of times parsed. Then you can refer to your variable as

current_observation['observation_location']['city'];
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top