当前位置:  开发笔记 > 编程语言 > 正文

在对每个条目执行请求时迭代数组

如何解决《在对每个条目执行请求时迭代数组》经验,为你挑选了2个好方法。

这是我的问题.我有一个数组,其中包含我需要查找天气的城市名称.所以我循环遍历每个城市并执行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(),似乎循环执行cities.length次,然后我得到成功函数警报.我的目标是简单地遍历每个城市,获取天气并在我的页面上显示它以及相关的城市名称.

另外,您建议我将内容与演示文稿分开?

谢谢.:)



1> bandi..:

我怀疑你的问题类似于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)
//...



2> patridge..:

由于Javascript使用函数进行闭包,我发现对我来说最简单的方法是将for循环的内容包装在内联函数中,该函数将当前城市名称复制到它始终可以访问的变量.

$(document).ready(function() {
    for (var cityIdx = 0; cityIdx < cities.length; cityIdx++) {
        new function() {
            var currentCity = cities[cityIdx];
            $.ajax({
                type: 'GET',
                url: LOCATION + currentCity,
                dataType: 'xml',
                success: function(xml) {
                    alert(currentCity);
                    if ($(xml).find('problem_cause') != 0) {
                        // Do what I want with the data returned
                        var weather = $(xml).find('temp_c').attr('data');
                    }
                }
            });
        }(); // the "();" calls the function we just created inline
    }
});

推荐阅读
手机用户2402851335
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有