如何在javascript中声明变量

时间:2010-09-02 00:38:03

标签: javascript jquery

$("#btnsub").click(function () {
    var add = $("#txtname").val();

    var obj;
    var geo = new google.maps.Geocoder;
    geo.geocode({ 'address': add }, function (results, status) {
        if (status == google.maps.GeocoderStatus.OK) {
            obj = results[0].geometry.location;
            obj = convert(obj);
            alert(obj);
        } else {
            alert("Geocode was not successful for the following reason: " + status);
        }
    });
    alert(obj);
  // why this alert run first instead of the upper alert()
});

3 个答案:

答案 0 :(得分:5)

geocode函数是异步

您传递的回调会在调用geocode后运行一段时间; geocode函数本身不会(也不能)等待响应。

答案 1 :(得分:4)

如果geo.geocode()是一个AJAX请求,那么之后来的代码不会等待响应在执行之前返回。

因此,代码乱序运行。第二个alert()发射,因为没有什么可以阻止它发射。第一个是在收到AJAX响应时触发的。

如果你有一些依赖于响应的其他代码,那么将该代码放在一个函数中,并从geo.geocode()的回调内部调用它。

 $("#btnsub").click(function () {
            var add = $("#txtname").val();

            var obj;
            var geo = new google.maps.Geocoder;
            geo.geocode({ 'address': add }, function (results, status) {
                if (status == google.maps.GeocoderStatus.OK) {
                    obj = results[0].geometry.location;
                    obj = convert(obj);
                    alert(obj);

                    // Call a function that relies on the response
                    //   and pass the obj to it.
                    someOtherFunction( obj );
                } else {
                    alert("Geocode was not successful for the following reason: " + status);
                }
            });
        });

function someOtherFunction( data ) {
    alert( data );
    // do something with the obj (referenced as data)
}

答案 2 :(得分:1)

可能是因为另一个是回调?这取决于.geocode对它的作用,但很可能它可能是一个ajax回调。