HTML5 / Javascript GeoLocation:将数据传递给回调函数 - 或 - 暂停异步调用(使用promises)?

时间:2014-02-10 07:21:12

标签: javascript ajax html5 asynchronous geolocation

我需要获取HTML5 / Javascript Geolocations将位置数据传递给ajax调用以存储在数据库中。我遇到的问题是(1)Geolocation调用是异步的,(2)变量范围正在绊倒我。

我正在考虑两种方法,但我不确定如何让任何一种方法正常工作。以下是方法:

需要传递以下代码中this的{​​{1}}值:

.click

或者我可以尝试推迟ajax调用,直到jQuery("div#normal .m_action").click(function() { navigator.geolocation.getCurrentPosition(storeAction(action), errorAction); }); function storeAction(action, position) { var latitude = position.coords.latitude; var longitude = position.coords.longitude; var accuracy = position.coords.accuracy; jQuery.ajax({ url: "./action.php", type: "POST", data: { action: this.id, lat: latitude, long: longitude } }).done(function(result) { if(result == "error") { alert("Error in ajax action.php file"); } else { jQuery(action).removeClass("m_action"); jQuery(action).html(result); } }).fail(function(result) { alert("There was an error with the ajax call itself") }); } 调用完成。下面的代码只是对我所说的粗略估计,尽管我(当然)意识到它远非正确:

getCurrentPosition

2 个答案:

答案 0 :(得分:2)

getCurrentPosition()方法定义为:

navigator.geolocation.getCurrentPosition(success, error, options)

其中success是一个回调函数,它将Position个对象作为唯一的输入参数。使用该对象,您可以获得纬度,经度和准确度。参数action可以作为全局变量提供。

答案 1 :(得分:0)

Here您可以找到有关HTML5地理位置的示例。在您的情况下,您可以创建一个像

这样的javascript函数
namespace NameSpace 
{ 
    class Class1 {}; class Class2 {}; 
} 

template <class T> // example Class1 or Class2 
void f(T object) { 
    NameSpace::T obj; // Something like this, but it doesn't work 
}