Polymer Can';t将用户位置传递给ajax调用,以从Foursquare获取场地
我正在用Polymer、谷歌地图和Foursquare API制作一个应用程序,但我被卡住了。这个想法是向用户展示附近的场地,这些场地是从Foursquare返回的。我正在使用Polymer Can';t将用户位置传递给ajax调用,以从Foursquare获取场地,polymer,Polymer,我正在用Polymer、谷歌地图和Foursquare API制作一个应用程序,但我被卡住了。这个想法是向用户展示附近的场地,这些场地是从Foursquare返回的。我正在使用从Foursquare获取场地 我已经创建了一个自定义元素,我正在使用geolocation获取用户的位置,并尝试将其传递给。当我手动传递纬度和经度时,AJAX调用非常有效,但是当我尝试将值更改为geolocation值时,AJAX调用中断 模板: <template> <geo-location w
从Foursquare获取场地
我已经创建了一个自定义元素,我正在使用geolocation
获取用户的位置,并尝试将其传递给
。当我手动传递纬度和经度时,AJAX调用非常有效,但是当我尝试将值更改为geolocation
值时,AJAX调用中断
模板:
<template>
<geo-location watch-pos latitude="{{ latitude }}" longitude="{{ longitude }}"></geo-location>
<google-map latitude="[[latitude]]" longitude="[[longitude]]" zoom="13" api-key="AIzaSyCZ52mvUoJplSOmOFE2KW0u5v6jny870IM">
<!-- <google-map-marker latitude="[[latitude]]" longitude="[[longitude]]" draggable="true"></google-map-marker>-->
</google-map>
<iron-ajax
auto
url="https://api.foursquare.com/v2/venues/search?"
params="{{ajaxParams}}"
last-response="{{data}}"
handle-as="json"
>
</iron-ajax>
<template is="dom-repeat" items="[[data.response.venues]]">
<span>{{item.name}}</span>
</template>
<script>
Polymer({
is: 'my-list',
properties: {
client_id: {
type: String,
value: 'THIS IS MY CLIENT_ID'
},
client_secret: {
type: String,
value: 'THIS IS MY CLIENT_SECRET'
},
v: {
type: Number,
value: '20150729'
},
limit: {
type: Number,
value: '10'
},
ll: {
type: String,
value:
getCurrentLat(function(pos){
console.log(pos);
})
},
ajaxParams: {
type: String,
computed: 'processParams(client_id, client_secret, v, limit, ll)'
}
},
processParams: function(client_id, client_secret, v, limit, ll) {
return {
client_id: client_id,
client_secret: client_secret,
v: v,
limit:limit,
ll: ll
};
}
});
function getCurrentLat(callback) {
if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition(function(position) {
callback(position.coords.latitude + ", " + position.coords.longitude);
});
} else {
console.log("Unable to access your geolocation");
}
}
ll: {
type: String,
value:
getCurrentLat(function(pos){
console.log(pos);
})
},
例如,每当我将
ll
值设置为'60,25'
时,AJAX调用都会返回正确的结果。此外,上面的console.log
正确地打印了用户的位置(类似于60、24
),但我不知道如何将pos
设置为值。首先,您的ll
属性声明有一个无效的值
字段,该字段用于提供初始值。它不打算像您正在尝试的那样设置回调。最初,您可能应该将该字段留空:
Polymer({
...
properties: {
ll: String
}
});
ll
的值可以在JavaScript中强制设置(即this.ll=position;
),也可以在标记中通过数据绑定声明设置(即
)。由于ll
值需要从navigator.geolocation.getCurrentPosition
异步来,我们可以从聚合物元素的生命周期回调调用它(例如,attached
),然后在geolocation
回调中强制设置ll
:
Polymer({
...
attached: function() {
getCurrentLat(function(position) {
this.ll = position;
}.bind(this));
}
});
但看起来您也在使用元素,它已经为您读取当前纬度/经度并提供实时更新,因此您实际上不需要自己使用navigator.geolocation
(在您的情况下是一次性更新)
代替上述更改,您可以修改ajaxParams
计算属性,使其基于现有的纬度
和经度
属性(由
填充):
这也将允许您摆脱getCurrentLat()
请注意,自Chrome 50起,地理定位API为。如果您尝试从http
而不是https
使用它,您会注意到控制台警告:
首先,您的
ll
属性声明有一个无效的值
字段,用于提供初始值。它不打算像您正在尝试的那样设置回调。最初,您可能应该将该字段留空:
Polymer({
...
properties: {
ll: String
}
});
ll
的值可以在JavaScript中强制设置(即this.ll=position;
),也可以在标记中通过数据绑定声明设置(即
)。由于ll
值需要从navigator.geolocation.getCurrentPosition
异步来,我们可以从聚合物元素的生命周期回调调用它(例如,attached
),然后在geolocation
回调中强制设置ll
:
Polymer({
...
attached: function() {
getCurrentLat(function(position) {
this.ll = position;
}.bind(this));
}
});
但看起来您也在使用元素,它已经为您读取当前纬度/经度并提供实时更新,因此您实际上不需要自己使用navigator.geolocation
(在您的情况下是一次性更新)
代替上述更改,您可以修改ajaxParams
计算属性,使其基于现有的纬度
和经度
属性(由
填充):
这也将允许您摆脱getCurrentLat()
请注意,自Chrome 50起,地理定位API为。如果您尝试从http
而不是https
使用它,您会注意到控制台警告:
谢谢你的回答!你建议的两种方法我都试过了,但还是不管用。。我认为更好的方法是使用
,但当我尝试时,纬度和经度都是空的。我不知道如何将这些值从
获取到ajaxParams
。我包含的代码笔对我有效,因此问题一定是特定于您的环境或您测试它的方式。你在https上测试这个吗?当提示您输入地理定位权限时,您是否单击了“允许”?地理定位是允许的,我不会在https上测试它。我真的不知道问题出在哪里。这就是为什么我没有使用
就尝试了这个方法。虽然我没有让它使用getCurrentLat()
但是地理位置API只能从https获得(您应该在控制台中看到一个声明,如更新的答案所示)。它正在工作!我现在觉得自己很愚蠢。。我没有注意到在Polymer()
之前添加HTMLImports()
。。。。非常感谢你!现在我的场地离我的位置很近。谢谢你的回答!你建议的两种方法我都试过了,但还是不管用。。我认为更好的方法是使用
,但当我尝试时,纬度和经度都是空的。我不知道如何将这些值从
获取到ajaxParams
。我包含的代码笔对我有效,因此问题一定是特定于您的环境或您测试它的方式。你在https上测试这个吗?当提示您输入地理定位权限时,您是否单击了“允许”?地理定位是允许的,我不会在https上测试它。我真的不知道问题出在哪里。这就是为什么我没有使用
就尝试了这个方法。虽然我没有让它使用getCurrentLat()
但是地理位置API只能从https获得(您应该在控制台中看到一个声明,如更新的答案所示)。它在