Javascript 在其他JS完全完成后执行更多JS
案例: 我有一个通过以下方式提交的web表单: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) {
$('#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,没错。如果由于任何原因(连接不好、计算量大)操作速度慢,即使是保守的超时也可能不够,那么当操作速度快时,操作会感觉滞后。