I'm try to access the lat and long from getCurrentPosition so that I can create a URL to use with an API. This is working if you call it from within the function or if you set a timeout on an alert(outside the function), as the current position takes a few moments to determine the coordinates. How can I access coords variables and/or the URL one? Thank you
我尝试从getCurrentPosition访问lat和long,以便我可以创建一个用于API的URL。如果您在函数内调用它或者在警报上设置超时(在函数外部),这是有效的,因为当前位置需要一些时间来确定坐标。如何访问coords变量和/或URL?谢谢
var coords1;
var coords2;
if (Ti.Geolocation.locationServicesEnabled) {
Titanium.Geolocation.purpose = 'Get Current Location';
Titanium.Geolocation.getCurrentPosition(function(e) {
if (e.error) {
Ti.API.error('Error: ' + e.error);
} else {
coords1 = e.coords.longitude;
coords1 = e.coords.latitude;
}
});
} else {
alert('Please enable location services');
}
var url = "http://www.mywebsite.com/api/return-latlong/"+coords1+"/"+coords2;
var xhr = Ti.Network.createHTTPClient({
onload: function(e) {
// this function is called when data is returned from the server and available for use
// this.responseText holds the raw text return of the message (used for text/JSON)
// this.responseXML holds any returned XML (including SOAP)
// this.responseData holds any returned binary data
Ti.API.debug(this.responseText);
alert('success');
},
onerror: function(e) {
// this function is called when an error occurs, including a timeout
Ti.API.debug(e.error);
alert('error');
},
timeout:5000 // in milliseconds
});
xhr.open("GET", url);
xhr.send(); // request is actually sent with this statement
alert(url);
1 个解决方案
#1
0
not sure I really get your problem, but you can use a function for your api http request, and call it when you obtain the current position's coords, something like the following:
不确定我真的遇到了你的问题,但你可以使用api http请求的函数,并在获得当前位置的坐标时调用它,如下所示:
if (Ti.Geolocation.locationServicesEnabled) {
Titanium.Geolocation.purpose = 'Get Current Location';
Titanium.Geolocation.getCurrentPosition(function(e) {
if (e.error) {
Ti.API.error('Error: ' + e.error);
} else {
var latitude = e.coords.latitude;
var longitude = e.coords.longitude;
// make the http request when coords are set
apiCall(latitude, longitude);
}
});
} else {
alert('Please enable location services');
}
function apiCall(lat, long) {
var url = "http://www.mywebsite.com/api/return-latlong/" + lat + "/" + long;
alert(url);
var xhr = Ti.Network.createHTTPClient({
onload: function(e) {
Ti.API.debug(this.responseText);
alert('success');
},
onerror: function(e) {
Ti.API.debug(e.error);
alert('error');
},
timeout:5000
});
xhr.open("GET", url);
xhr.send();
}
Hth.
#1
0
not sure I really get your problem, but you can use a function for your api http request, and call it when you obtain the current position's coords, something like the following:
不确定我真的遇到了你的问题,但你可以使用api http请求的函数,并在获得当前位置的坐标时调用它,如下所示:
if (Ti.Geolocation.locationServicesEnabled) {
Titanium.Geolocation.purpose = 'Get Current Location';
Titanium.Geolocation.getCurrentPosition(function(e) {
if (e.error) {
Ti.API.error('Error: ' + e.error);
} else {
var latitude = e.coords.latitude;
var longitude = e.coords.longitude;
// make the http request when coords are set
apiCall(latitude, longitude);
}
});
} else {
alert('Please enable location services');
}
function apiCall(lat, long) {
var url = "http://www.mywebsite.com/api/return-latlong/" + lat + "/" + long;
alert(url);
var xhr = Ti.Network.createHTTPClient({
onload: function(e) {
Ti.API.debug(this.responseText);
alert('success');
},
onerror: function(e) {
Ti.API.debug(e.error);
alert('error');
},
timeout:5000
});
xhr.open("GET", url);
xhr.send();
}
Hth.