我在移动设备上使用我的代码时遇到了错误(PC的处理时间越短,就不会出现问题)。我怀疑我遇到的问题是没有顺序触发的功能 - 即即使没有设置所有参数,它们仍会继续进行。
基本前提是调用JQuery Geolocation,并且纬度/经度数据与通过onClick函数传递的参数一起使用。然后将其传递给AJAX,后者返回基于此数据的结果。
在移动设备上进行测试时,有时当您点击链接时,GPS不会及时触发,但仍会继续播放。结果是没有任何回复,用户面临空白屏幕。如果你给它足够的时间和足够的点击,它将工作。这并不总是会发生,但似乎并非所有数据都准备就绪。
我尝试了很多变种,但由于我只是一个中级JS编码器,我无法解决问题所在。喜欢一些反馈!
if(navigator.geolocation) {/* Function for returning list of locations for a unique cuisine */
function locationList(clicked_id) {
navigator.geolocation.getCurrentPosition(
function(position) {
$.ajax({
url: 'search.php',
type: 'GET',
data: 'id=' + clicked_id + '&action=geolocation&latitude=' + position.coords.latitude + '&longitude=' + position.coords.longitude,
beforeSend: function () {
$('#location-list').html('<div class="ajax-load"><img src="img/ajax-loader.gif" /></a>');
},
success: function (msg) {
$('#location-list').html(msg);
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
alert('Error submitting request.');
}
});
}, /* position */
function() {
$('#location-list').html('<div class="toolbar"><h1>GPS Error</h1><a class="back" href="#home">Home</a></div><div class="scroll"><ul class="rounded"><li><p>To take advantage of this app you need the GPS capability of your phone turned on. Please check whether this is turned on or else the app will not work</p></li></ul></div>');
} /* no position so failure */
);
} /* locationList */
}/* navigator.geolocation */
答案 0 :(得分:1)
这不是自定义函数的顺序(通常以串行方式执行),它是内部API;在这种情况下,$.ajax
。默认情况下,Ajax调用是异步的,因此函数的其余部分将继续运行,而不是关心响应。
要等待响应,请将参数async: false
添加到Ajax调用中。
[编辑添加:]根据jfriend00的评论,这将导致糟糕的用户体验。我无意为他重新设计OP的方法,但与此同时,我不想暗示通过使用异步来大大改善设计的认可。