首页 > 解决方案 > 如何让函数等待另一个完成执行?

问题描述

我有一个表单,是通过malsup ajaxForm插件提交的,我希望ajax调用等到leaflet准确位置插件找到准确的位置,这样我就可以将它附加到表单设置发送的数据中它在我的 html 中的一些隐藏字段中。问题是,我真的没有明确的方法来做到这一点。

我有以下内容:

function InitMap()
{
map = L.map('map');

function onAccuratePositionError (e) {
    addStatus(e.message, 'error');
}

function onAccuratePositionProgress (e) {

}

function onAccuratePositionFound (e) {
    $('#latitud').val(e.latlng.lat);
    $('#longitud').val(e.latlng.lng);
    $('#presicion').val(e.accuracy);
}

map.on('accuratepositionprogress', onAccuratePositionProgress);
map.on('accuratepositionfound', onAccuratePositionFound);
map.on('accuratepositionerror', onAccuratePositionError);

}

我的 Ajax 调用:

function InitJForm()
{
  $('form').ajaxForm({
        beforeSubmit:Geolocalizar,
        success: function(datos)
         { 
            window.location.href = 'some url...';
         },
        error: function(datos) 
        {
        var w = window.open('about:blank');
            w.document.open();
            w.document.write(datos.responseText);
            w.document.close();
    }
   });
}

地理位置调用:

function Geolocalizar()
{
map.findAccuratePosition({
    maxWait: 15000,
    desiredAccuracy: 20
});
return true;
}

有没有办法让地理定位调用等待 findaccurateposition 函数在发送 true 并提交请求之前完成查找位置?

标签: jqueryleafletajaxform

解决方案


好吧..经过大量工作并尝试Defferred对象也没有成功,(无法捕获Api函数“findAccuratePosition”完成时,因为我认为它完成了)...我决定删除MALSUP ajaxForm插件并制作一个简单的自定义$ .ajax。邮政。

我阻止默认提交并调用 e.preventdefault。我刚刚将自定义 ajax 请求移至找到的 OnAccuratePosition,所以我保证,在地理定位找到坐标后,将使用位置信息执行 ajax 帖子。此外,我的表单正在提交一些文件(imgs),并且不得不遇到 FormData 对象解决方案,通过 AJAX 上传文件,我只发现 HERE 很好地解释了:

http://hayageek.com/jquery-ajax-form-submit/


推荐阅读