无法访问$ .ajax.done()中的全局变量

时间:2017-05-01 14:21:17

标签: javascript jquery ajax

我正在尝试通过innerHTML打印一些使用ajax调用获得的数据,但是全局数组元素在done()promise中是不可访问的。它确实是未定义的。 为什么会这样?

<html>
<head></head>
<body>
    <script src ="jquery.min.js"></script>
    <script>
        $(document).ready(function(){
            var elements = document.getElementsByClassName("wind");

            for(i=0;i<elements.length;i=i+1){

                $.ajax({
                    type:"GET",
                    url:"http://api.openweathermap.org/data/2.5/weather?q="+elements[i].innerHTML+"&appid=7876b25bdca1397553df39ef3ea05fd1",
                    dataType: "json"
                }).done(function(data){
                    elements[i].innerHTML = data.wind.speed; //elements[i] is undefined
                });

                //elements[i].innerHTML     here elements[i] is OK but I don't have access to "data"

            }

        });
    </script>

    <div class="wind">Venice,it</div>
    <div class="wind">Rome,it</div>

</body>

1 个答案:

答案 0 :(得分:0)

尝试使用success设置而不是done。这将在请求成功时激活并返回数据。

$.ajax({
    type:"GET",
    url:"http://api.openweathermap.org/data/2.5/weather?q="+elements[i].innerHTML+"&appid=7876b25bdca1397553df39ef3ea05fd1",
    dataType: "json",
    success: (function(data){
        elements[i].innerHTML = data.wind.speed; 
    }),
});