如何从 Javascript 函数中调用 PL/SQL 变量?
How do I call PL/SQL variables from within a Javascript function?
我想通过从 javascript 函数中调用 pl/sql 变量来显示坐标 - 从 Oracle 数据库检索 - 作为 Google 地图上的标记。这一切都在 APEX 5 中完成。任何帮助将不胜感激!
什么有效:我selectGEOMETRY
(SDO_GEOMETRY)在PHOTO
table变成了l_lng
(经度)和l_lat
(纬度)变量:
SELECT t.x Longitude,
t.y Latitude
FROM photo,
TABLE(sdo_util.getvertices(photo.geometry)) t;
使用 DBMS_OUTPUT.put_line(l_lng);
和 DBMS_OUTPUT.put_line(l_lat);
,我可以看到 l_lng
和 l_lat
成功存储了值,因为输出是:
-4.083714
50.315475
具体来说,javascript 变量 myLatLng
需要从 l_lng
和 l_lat
.
中提取坐标
var myLatLng = {lat: l_lat, lng: l_lng};
我的完整代码:
DECLARE
l_lng NUMBER;
l_lat NUMBER;
begin
SELECT t.x Longitude,
t.y Latitude
INTO l_lng, l_lat
FROM photo,
TABLE(sdo_util.getvertices(photo.geometry)) t
WHERE photo.id=39;
htp.print('
<html>
<head>
<style>
#map {
width: 500px;
height: 400px;
}
</style>
<script src="https://maps.googleapis.com/maps/api/js"></script>
<script>
function initialize() {
var myLatLng = {
lat: l_lat,
lng: l_lng
};
var map = new google.maps.Map(document.getElementById("map"), {
zoom: 17,
center: myLatLng
});
var marker = new google.maps.Marker({
position: myLatLng,
map: map,
title: 'Hello World!'
});
}
</script>
</head>
<body>
<div id="map"></div>
</body>
</html>
');
end;
根据@vmachan 的建议,我将 ht.print 语句修改为:
htp.print('<html>');
htp.print('<head>');
htp.print('<style>
#map {
width: 500px;
height: 400px;
}
</style>
');
htp.print('<INPUT TYPE="hidden" NAME="p_lng" VALUE="'||l_lng||'">');
htp.print('<INPUT TYPE="hidden" NAME="p_lat" VALUE="'||l_lat||'">');
htp.print('
<script src="https://maps.googleapis.com/maps/api/js"></script>
<script>
function initialize() {
var myLatLng = {
lat: p_lat,
lng: p_lng
};
var map = new google.maps.Map(document.getElementById("map"), {
zoom: 17,
center: myLatLng
});
}
</script>
');
htp.print('</head>');
htp.print('
<body>
<div id="map"></div>
</body>
');
htp.print('</html>');
下面是一个片段,我认为如果应用它会起作用,这就是我之前在评论中试图提出的建议。
htp.print('<script src="https://maps.googleapis.com/maps/api/js"></script>
<script>
function initialize() {
var myLatLng = {
lat: ' || l_lng || ',
lng: ' || l_lat || '
};
var map = new google.maps.Map(document.getElementById("map"), {
zoom: 17,
center: myLatLng
});
}
</script>');
发送到 htp.print 时,您需要在多行中解决字符串延续问题,或者只是将整个 html 连接成一行,这样可以工作但可能不太可读。
希望对您有所帮助。
您输出的是文本输入元素中的值,而不是 javascript 变量。要么编写代码将输入元素的值提取到 javascript 变量中,要么将其输出为 javascript 以开始。替换:
htp.print('<INPUT TYPE="hidden" NAME="p_lng" VALUE="'||l_lng||'">');
htp.print('<INPUT TYPE="hidden" NAME="p_lat" VALUE="'||l_lat||'">');
和
htp.print('var p_lng='||l_lng||';');
htp.print('var p_lat='||l_lat||''');
我想通过从 javascript 函数中调用 pl/sql 变量来显示坐标 - 从 Oracle 数据库检索 - 作为 Google 地图上的标记。这一切都在 APEX 5 中完成。任何帮助将不胜感激!
什么有效:我selectGEOMETRY
(SDO_GEOMETRY)在PHOTO
table变成了l_lng
(经度)和l_lat
(纬度)变量:
SELECT t.x Longitude,
t.y Latitude
FROM photo,
TABLE(sdo_util.getvertices(photo.geometry)) t;
使用 DBMS_OUTPUT.put_line(l_lng);
和 DBMS_OUTPUT.put_line(l_lat);
,我可以看到 l_lng
和 l_lat
成功存储了值,因为输出是:
-4.083714
50.315475
具体来说,javascript 变量 myLatLng
需要从 l_lng
和 l_lat
.
var myLatLng = {lat: l_lat, lng: l_lng};
我的完整代码:
DECLARE
l_lng NUMBER;
l_lat NUMBER;
begin
SELECT t.x Longitude,
t.y Latitude
INTO l_lng, l_lat
FROM photo,
TABLE(sdo_util.getvertices(photo.geometry)) t
WHERE photo.id=39;
htp.print('
<html>
<head>
<style>
#map {
width: 500px;
height: 400px;
}
</style>
<script src="https://maps.googleapis.com/maps/api/js"></script>
<script>
function initialize() {
var myLatLng = {
lat: l_lat,
lng: l_lng
};
var map = new google.maps.Map(document.getElementById("map"), {
zoom: 17,
center: myLatLng
});
var marker = new google.maps.Marker({
position: myLatLng,
map: map,
title: 'Hello World!'
});
}
</script>
</head>
<body>
<div id="map"></div>
</body>
</html>
');
end;
根据@vmachan 的建议,我将 ht.print 语句修改为:
htp.print('<html>');
htp.print('<head>');
htp.print('<style>
#map {
width: 500px;
height: 400px;
}
</style>
');
htp.print('<INPUT TYPE="hidden" NAME="p_lng" VALUE="'||l_lng||'">');
htp.print('<INPUT TYPE="hidden" NAME="p_lat" VALUE="'||l_lat||'">');
htp.print('
<script src="https://maps.googleapis.com/maps/api/js"></script>
<script>
function initialize() {
var myLatLng = {
lat: p_lat,
lng: p_lng
};
var map = new google.maps.Map(document.getElementById("map"), {
zoom: 17,
center: myLatLng
});
}
</script>
');
htp.print('</head>');
htp.print('
<body>
<div id="map"></div>
</body>
');
htp.print('</html>');
下面是一个片段,我认为如果应用它会起作用,这就是我之前在评论中试图提出的建议。
htp.print('<script src="https://maps.googleapis.com/maps/api/js"></script>
<script>
function initialize() {
var myLatLng = {
lat: ' || l_lng || ',
lng: ' || l_lat || '
};
var map = new google.maps.Map(document.getElementById("map"), {
zoom: 17,
center: myLatLng
});
}
</script>');
发送到 htp.print 时,您需要在多行中解决字符串延续问题,或者只是将整个 html 连接成一行,这样可以工作但可能不太可读。
希望对您有所帮助。
您输出的是文本输入元素中的值,而不是 javascript 变量。要么编写代码将输入元素的值提取到 javascript 变量中,要么将其输出为 javascript 以开始。替换:
htp.print('<INPUT TYPE="hidden" NAME="p_lng" VALUE="'||l_lng||'">');
htp.print('<INPUT TYPE="hidden" NAME="p_lat" VALUE="'||l_lat||'">');
和
htp.print('var p_lng='||l_lng||';');
htp.print('var p_lat='||l_lat||''');