顺序JQuery函数

时间:2012-03-24 02:35:45

标签: jquery ajax geolocation sequential

我在移动设备上使用我的代码时遇到了错误(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 */

1 个答案:

答案 0 :(得分:1)

这不是自定义函数的顺序(通常以串行方式执行),它是内部API;在这种情况下,$.ajax。默认情况下,Ajax调用是异步的,因此函数的其余部分将继续运行,而不是关心响应。

要等待响应,请将参数async: false添加到Ajax调用中。

[编辑添加:]根据jfriend00的评论,这将导致糟糕的用户体验。我无意为他重新设计OP的方法,但与此同时,我不想暗示通过使用异步来大大改善设计的认可。