Javascript 在其他JS完全完成后执行更多JS

Javascript 在其他JS完全完成后执行更多JS,javascript,jquery,callback,Javascript,Jquery,Callback,案例: 我有一个通过以下方式提交的web表单: $('#myForm').on('valid', function (e) { ... } 在这个函数中,我从一个代码部分开始,从一个地址获取一个地理位置 var geocoder = new google.maps.Geocoder(); var address = $('#address').val(); geocoder.geocode( { 'address': address}, function(results, status) {

案例: 我有一个通过以下方式提交的web表单:

 $('#myForm').on('valid', function (e) { ... }
在这个函数中,我从一个代码部分开始,从一个地址获取一个地理位置

var geocoder = new google.maps.Geocoder();
var address = $('#address').val();
geocoder.geocode( { 'address': address}, function(results, status) {
    if (status == google.maps.GeocoderStatus.OK) {
        $('#latlng').val(results[0].geometry.location);
    }
});
请参见我在隐藏的输入字段中添加了地理位置

在这部分之后,我调用
$.ajax({…})
来发送数据

问题: ajax调用在隐藏字段填充地理位置之前发送数据(该字段仍在运行;成功)

问题 如何确保在结束之前的代码部分时激活
$.ajax
调用

是否需要使用特定设置配置
$.ajax
?有什么办法可以等待吗

谢谢


是的,我查看了其他答案,但无法使用回调(前面提到的)来工作。

您需要将ajax调用放在回调中

大概是这样的:

geocoder.geocode( { 'address': address}, function(results, status) {

    //this function is the callback
    //it will run when geocode completes
    if (status == google.maps.GeocoderStatus.OK) {
        $('#latlng').val(results[0].geometry.location);
    }

    //ajax here
    $.ajax(....)

});

//code down here will run before the callback executes
geocode的第二个参数是一个函数,该函数在geocode操作完成后以及所有当前代码执行完毕后运行。因此,如果将ajax调用直接放在地理代码调用之后,它将始终在执行地理代码回调之前运行

如果希望代码在回调中发生的事情之后执行,则必须从回调内部调用它们,或者让它们等待消息或事件。您可以在回调完成时触发这样的事件,或者(效率较低)以固定的间隔触发这样的事件


但要理解的关键是回调是异步的,并且在当前上下文中的所有代码(最早)执行之前不会运行回调

您的ajax调用应该在
geocode
回调中

geocoder.geocode( { 'address': address}, function(results, status) {
    if (status == google.maps.GeocoderStatus.OK) {
        $('#latlng').val(results[0].geometry.location);
        //Ajax call here.
        $.ajax({});
    }
});

使用JavaScript setTimeout()函数并在您想首先完成的操作>Easy Peazy>之后调用setTimeout(),是的,Sabu会这样编码。

虽然您可以使用setTimeout,但当api调用具有回调函数时,为什么要这样做呢。更不用说,有许多变量(服务器负载、internet连接)可能会导致响应时间比设置的setTimeout更长。请同意@PatrickEvans。还有,你应该给暂停多少时间?!你看不出这有什么问题吗?@leetylor,没错。如果由于任何原因(连接不好、计算量大)操作速度慢,即使是保守的超时也可能不够,那么当操作速度快时,操作会感觉滞后。