我有一个表单,该表单是通过malsup ajaxForm插件提交的,并且我希望ajax调用要等到传单精确位置插件找到正确位置后,再将其附加到由在我的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函数完成位置查找,然后再发送真值并提交请求?
答案 0 :(得分:1)
好吧..经过大量工作并尝试了没有成功的Defferred对象,(Api函数“ findAccuratePosition”完成时无法捕获,因为我认为它已经完成了)...我决定删除MALSUP ajaxForm插件并制作一个简单的自定义$ .ajax。帖子。
我阻止默认的提交,并调用e.preventdefault。 我只是将自定义ajax请求移至找到的OnAccuratePosition,所以我保证在地理位置找到坐标之后,将使用位置信息执行ajax发布。 另外,我的表单正在提交一些文件(imgs),并且不得不遇到FormData对象解决方案,以便通过AJAX上传文件,直到我才发现在这里进行了精美的解释:
答案 1 :(得分:0)
香草ajax调用具有属性async:true
或async:false
。您可以通过其他方式在当前代码中利用这一点(您绝对可以弄清楚)
有一个相关的社区问题可以帮助您-
What does "async: false" do in jQuery.ajax()?
更新:现在,正如您所说,您需要等待函数完成。您可以通过将回调函数作为参数来实现。首先执行回调函数,然后才执行将这些函数作为参数传递到的函数。下面概述了如何在函数中使用回调。
alert(Geolocalizar(function(){
map.findAccuratePosition({
maxWait: 15000,
desiredAccuracy: 20 });
return true;
}
)
);
function Geolocalizar(callback)
{
// this code will be executed after callback function is executed
// print or return anything;
}