这是我的问题。我有一个包含我需要查找天气的城市名称的数组。所以我循环遍历每个城市并执行 AJAX 请求来检索天气。
var LOCATION = 'http://www.google.com/ig/api?weather=';
$( document ).ready( function() {
for( var cityIdx = 0; cityIdx < cities.length; cityIdx++ ) {
$.ajax({
type: 'GET',
url: LOCATION + cities[ cityIdx ],
dataType: 'xml',
success: function( xml ) {
if( $( xml ).find( 'problem_cause' ) != 0 ) {
// Do what I want with the data returned
var weather = $( xml ).find( 'temp_c' ).attr( 'data' );
}
}
});
}
});
我遇到的问题是,在成功函数中,我无法访问城市名称(通过城市 [cityIdx])。我在 for 循环和成功函数中插入了一个 alert() ,似乎循环被执行了 city.length 次,然后我得到了成功函数警报。我的目标是简单地遍历每个城市,获取天气并将其与相关城市名称一起显示在我的页面上。
另外,您建议我应该怎么做才能将内容与演示文稿分开?
谢谢你。 :)
最佳答案
我怀疑您的问题类似于 http://ejohn.org/apps/learn/ 的示例。索引变量 cityIdx 在您创建的闭包中随着 for 循环的处理而更新,因此当您的函数成功运行时,cityIdx 将指向数组中的最后一个元素。解决方案是使用评估的匿名函数来创建一个独立的上下文,其中索引值不会更新。
//...
success: (function(cities, idx) {
return function( xml ) {
if( $( xml ).find( 'problem_cause' ) != 0 ) {
// Do what I want with the data returned
// use cities[idx]
var weather = $( xml ).find( 'temp_c' ).attr( 'data' );
}
};
})(cities, cityIdx)
//...