您好我正在使用谷歌地方api javascript sdk,并希望使用ROR将结果保存在我的数据库中 - 我想知道前四天,它成功保存了lat / lng但现在它保存为null。以下是我的解释
我在javascript中使用此代码
places = new google.maps.places.PlacesService(map);
places.nearbySearch(request, callback);
function callback(results, status) {
if (status == google.maps.places.PlacesServiceStatus.OK) {
clearMarkers();
//alert(JSON.stringify(results));
$.ajax({
url: "/myurl",
data:{
'google_searched_locations': JSON.stringify(results)
},
dataType: "json",
method: 'post',
async : false,
success: function(data){
}
});
}
在我执行console.log(results[0].geometry.location.lng());
时的回调函数中,当我执行时,它会将结果显示为74.30889000000002
console.log(results[0]);
输出
geometry
Object { location=L}
location
L { lat=function(), lng=function(), toString=function(), more...}
equals function(a)
j function(a)
lat function()
lng function()
toString function()
这显然是有道理的。但是在firefox的控制台中,ajax数据参数以下列形式显示数据
[{"geometry":{"location":{}}]
为了清楚起见,我跳过了其他参数,因为请求中存在所有其他内容。但你可以看到位置是完全的 空的,为什么?以及如何在位置对象
中发送results[0].geometry.location.lng()
值
答案 0 :(得分:2)
由于附近搜索请求返回google.maps.LatLng type
的var now = new Date();
var tomorrow = now.getFullYear() + "-" + (now.getMonth() + 1) + "-" + (now.getDate() + 1) + " " + now.getHours() + ":" + now.getMinutes() + ":" + now.getSeconds();
$('#end_at').datetimepicker({
format: 'YYYY-MM-DD hh:mm:ss',
startDate: tomorrow
});
属性,因此需要显式序列化,因此可以使用以下函数:
location
转换为字符串表示形式。
toString()
为此LatLng返回“lat,lng”形式的字符串。我们默认将lat / lng值舍入到6位小数。
您可以为此目的引入一个新属性来存储位置字符串表示,如下所示:
toUrlValue
示例强>
var results = results.map(function(item){
item.geometry.locationString = item.geometry.location.toString(); //string represenation of location property
return item;
});
function initialize() {
var pyrmont = new google.maps.LatLng(-33.8665, 151.1956);
var map = new google.maps.Map(document.getElementById('map'), {
center: pyrmont,
zoom: 15,
scrollwheel: false
});
// Specify location, radius and place types for your Places API search.
var request = {
location: pyrmont,
radius: '500',
types: ['store']
};
// Create the PlaceService and send the request.
// Handle the callback with an anonymous function.
var service = new google.maps.places.PlacesService(map);
service.nearbySearch(request, function (results, status) {
if (status == google.maps.places.PlacesServiceStatus.OK) {
//serialize location to string
var results = results.map(function(item){
item.geometry.locationString = item.geometry.location.toString();
return item;
});
document.getElementById('output').innerHTML = JSON.stringify(results, null, 2);
}
});
}
// Run the initialize function when the window has finished loading.
google.maps.event.addDomListener(window, 'load', initialize);
html, body {
height: 100%;
margin: 0;
padding: 0;
}
#map {
height: 100%;
}
答案 1 :(得分:1)
可能无法通过JSON传输函数(例如本例中的The Java Persistence API (JPA) component is initializing.
The com.ibm.websphere.persistence.PersistenceProviderImpl class is loaded as the default Java Persistence API (JPA) provider.
The Java Persistence API (JPA) component has initialized.
...
The Java Persistence API (JPA) component is starting.
The Java Persistence API (JPA) component has started.
...
OpenJPA dynamically loaded a validation provider.
和lat()
)。
您必须首先解析lng()
并使用所需的值创建一些自定义值,以便能够通过JSON传输纬度和经度