2012-06-07 28 views
0

我的网站上有大约15个以下代码的副本。唯一改变的是URL,经度,纬度和标记变量标题。我该如何削减这个并减少重复?使用AJAX JSON调用API来减少重复使用

$.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); 
}}); 

回答

1

您可以创建一个函数,它接受这些变量并将它们提供给ajax调用。然后,你只需要这个AJAX块的一个副本,您可以通过调用函数getWeather

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); 
     } 
    }); 
} 

我不知道如果我处理的标题正确这里打电话,但你的想法。如果您对标题如何改变有所了解,我可以相应地修改代码。

希望这会有所帮助。

+0

诺曼,这几乎正是我一直在寻找我的想法!谢谢!这引发了一些问题,但是......我如何以干净,可重用的方式声明这些变量?我如何确保将每组这些变量打包在一起?我所指的变量标题是'markerRichmond'部分。 –

+0

任何你想让这个ajax调用的地方都可以调用'getWeather'函数,并为变量传递适当的值。例如,要在您的原始文章中进行调用:'getWeather(“http://api.wunderground.com/api/cd48ac26fb540679/conditions/q/pws:KCASANFR128.json”,37.779806,-122.471895,“title”) '。标题是你传递给'markerRichmond.bindPopup'方法的部分吗? –

+0

啊,所以我每次执行这个while的东西时仍然必须传递变量?我想把url,lat,long等放到一个数组或哈希中,然后调用运行这个代码,直到我用尽了所有的值......这有道理吗? –

0
var current_observation = parsed_json['current_observation']; 

这也缩短了解析的次数。 然后你可以参考你的变量

current_observation['observation_location']['city'];