我对此问题感到困惑。请看看我的代码。 当函数提示时它表示没有定义lon和lat。 我在debuger中观察selectLat,selectLon,param,但前两个变量具有正确的属性,尽管param.lat和param.lon未定义。 他们怎么了?
var selectLat,selectLon;
function showCurrent(s){
if(navigator.geolocation){
navigator.geolocation.getCurrentPosition(s);
}
}
function passLatLon(currentPos){
selectLat=currentPos.coords.latitude;
selectLon=currentPos.coords.longitude;
}
<script>
showCurrent(passLatLon);
var param={
lat:selectLat,
lon:selectLon,
};
function getResults(param, function(data){
alert(JSON.stringify(data));
}
答案 0 :(得分:1)
也许试试这个:
function showCurrent(s){
if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition(s);
} else {
console.log("Geolocation is not supported by this browser.");
}
}
function passLatLon(currentPos){
var param = {
selectLat:currentPos.coords.latitude,
selectLon:currentPos.coords.longitude
}
getResults(param); //getResults() : You never called this
}
function getResults(data){
alert(JSON.stringify(data));
}
showCurrent(passLatLon);
由于
答案 1 :(得分:0)
您获得的错误:您在创建selectLat之前设置了lat:selectLat。
编辑:另请注意:lon:selectLon末尾的逗号会生成语法错误。
主要的是:您正在使用需要时间执行的代码。在使用变量之前,必须等到服务准备就绪。
这可能就像你想要的那样。
<script>
var selectLat, selectLon, param;
// requests a position tracking
function showCurrent(successCallback) {
if(navigator.geolocation){
navigator.geolocation.getCurrentPosition(successCallback);
}
}
// callback. This function gets triggered when the position was found
function passLatLon(currentPos) {
selectLat=currentPos.coords.latitude;
selectLon=currentPos.coords.longitude;
// only now we can set var param
param = {
lat: selectLat,
lon: selectLon
};
getResults(param);
}
// request position tracking
showCurrent(passLatLon);
function getResults(data) {
alert(JSON.stringify(data));
}
</script>
编辑:与Rizo大致相同的事情发生在同一时间
答案 2 :(得分:0)
定义时:
void loadFile(const char* fn)
{
std::ifstream fin(fn);
if(!fin.good())
throw std::runtime_error("File could not be opened.");
std::string code(std::istreambuf_iterator<char>(fin), std::istreambuf_iterator<char>());
fin.close();
std::string test = "test";
loadString(test.c_str());
}
... var param={
lat:selectLat,
lon:selectLon,
};
→lat
,selectLat
→lon
成对绑定,您只需指定当前selectLon
/ {{1 } {value(在selectLat
声明时未定义)到selectLon
/ param
属性。
你可以绑定它们(例如,通过lat
),但这可能不是你想要的,真的。相反,尝试完全删除lon
/ Object.defineProperty
变量,如下所示:
selectLat
修改强>
selectLon
对象的属性永远不会更改,因为它们实际上绑定到var param = {
lat: 0,
lon: 0,
};
function passLatLon(currentPos){
param.lat = currentPos.coords.latitude;
param.lon = currentPos.coords.longitude;
}
/ param
变量,因此,只要{{1 }} / selectLat
变量已更改,不会影响selectLon
个对象。
您必须直接将selectLat
属性更改为@Rize并建议,或者通过某些变通方法将其绑定到selectLon
/ param
并在您的模型上触发param
事件手动
另一个可能的原因:selectLat
是异步的,所以在调用selectLon
坐标仍然未解析后,因此change
/ getCurrentPosition()
未设置({{1}正如他们所声明的那样)。这就是为什么在第一次打电话给showCurrent(passLatLon)
之后他们会selectLat
,在第二次之后 - 他们将价值保留在之前的通话中,依此类推:
selectLon