案例: 我有一个通过以下方式提交的网络表单:
$('#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
?有等待的解决方案吗?
谢谢!
是的,我查看了其他答案,但无法回复(已提及)。
答案 0 :(得分:2)
您需要将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
地理编码的第二个参数是一个函数,它在地理编码操作完成后运行,并在所有当前代码执行完毕后运行。因此,如果在地理编码调用之后直接放置ajax调用,它将始终在地理编码回调执行之前运行。
如果希望代码在回调中发生的事情后执行,则必须从回调内部调用它们,或者让它们等待消息或事件。您可以在回调完成时触发类似的事件,或者以固定间隔(低效率)触发事件。
要理解的关键是回调是异步的,直到(最早)当前上下文中的所有代码都已执行时才会运行。
答案 1 :(得分:0)
您的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({});
}
});
答案 2 :(得分:-3)
使用JavaScript setTimeout()函数并调用setTimeout()在您要完成的操作之后首先> Easy Peazy>是的萨布会用这种方式编码。