这是我的问题。我有一个包含我需要查找天气的城市名称的数组。所以我循环遍历每个城市并执行 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)
//...

10-07 14:44