2013-08-21 8 views
0

Я получаю геолокацию. Проблема у меня в том, что геолокация занимает несколько секунд, чтобы ответить. К тому времени мой аякс уже был вызван в документе, и длинный/лат никогда не был отправлен. Как я могу удостовериться, что ajax не вызывается до тех пор, пока не будет завершена обработка?Функции загрузки Javascript asychronosuly

if (navigator.geolocation) { 
    navigator.geolocation.getCurrentPosition(showPosition); 
} else { 
    //get it another way 

    //else 
    var Longitude = '0'; 
    var Latitude = '0'; 
} 

function showPosition(position) { 
    var Longitude = position.coords.longitude; 
    var Latitude = position.coords.latitude; 
} 

$.ajax({ 
    url: 'activities.php?action=log-campaign-visit', 
    type: 'post', 
    data: { 
     DeviceID: session, 
     CampaignId: id, 
     User: userid, 
     IP: IP, 
     Agent1: agent1, 
     Referer1: referer1, 
     CouponId: couponId, 
     CampaignMedium: Cmedium, 
     CampaignSource: source1, 
     URL: fullUrl, 
     RedemptionCode: RedemptionCode, 
     Userlanguage: userLang, 
     ScreenWidth: screenWidth, 
     ScreenHeight: screenHeight, 
     ScreenOrientation: orientation, 
     Longitude: Longitude, 
     Latitude: Latitude 
    }, 
    success: function (data) { 
     $('#RedemptionCode').html(data); 
     if (data == 'Success') {} 
    }, 
    done: function() { 
     alert("done"); 
    }, 
    fail: function() { 
     alert("error"); 
    }, 
    always: function() { 
     alert("complete"); 
    }, 
}); 
+1

переместите ваш вызов ajax в ваш обратный вызов геолокации – dc5

ответ

0

Если геолокации доступна, то вам необходимо отправить запрос Аякса после geolocatoion обратного вызова завершается

Я переместил запрос Аякса отдельный метод, потому что он должен быть вызван дважды, первый в другая часть вторая в обратном вызове геолокации

if (navigator.geolocation) { 
    navigator.geolocation.getCurrentPosition(showPosition); 
} else { 
    // get it another way 

    doAjax('0', '0') 
} 

function showPosition(position) { 
    var Longitude = position.coords.longitude; 
    var Latitude = position.coords.latitude; 
    doAjax(Latitude, Longitude) 

} 

function doAjax(Latitude, Longitude) { 
    $.ajax({ 
     url : 'activities.php?action=log-campaign-visit', 
     type : 'post', 
     data : { 
      DeviceID : session, 
      CampaignId : id, 
      User : userid, 
      IP : IP, 
      Agent1 : agent1, 
      Referer1 : referer1, 
      CouponId : couponId, 
      CampaignMedium : Cmedium, 
      CampaignSource : source1, 
      URL : fullUrl, 
      RedemptionCode : RedemptionCode, 
      Userlanguage : userLang, 
      ScreenWidth : screenWidth, 
      ScreenHeight : screenHeight, 
      ScreenOrientation : orientation, 
      Longitude : Longitude, 
      Latitude : Latitude 
     }, 
     success : function(data) { 
      $('#RedemptionCode').html(data); 
      if (data == 'Success') { 
      } 
     }, 
     done : function() { 
      alert("done"); 
     }, 
     fail : function() { 
      alert("error"); 
     }, 
     always : function() { 
      alert("complete"); 
     } 
     , 
    }); 
} 
1

Положите ваш вызов ajax внутри функции; вызвать из

  • function showPosition
  • else блок
  • и после тайм-аута (пользователь может не заметить, принять geolocationing)
0

Переместить вызов Ajax к функции sepparate. Затем в вызове это в функции showPosition и в другой части первой if. Таким образом, он всегда вызывается, и он ждет завершения геолокации.
Если бы вы могли проверить, невозможно ли установить геолокацию и вызвать вызов ajax в этом случае, тоже было бы неплохо.

Смежные вопросы