如何解决从鼠标单击事件侦听器向Perl CGI脚本添加调用时遇到问题
我有一个定义了“鼠标单击事件”处理程序的Google Maps javascript。鼠标单击时,将出现一个弹出窗口,其中包含单击的最后位置。我试图添加计算距离并确定当前和最后鼠标位置的点击次数。我的Perl CGI脚本运行良好,并且可以在URL地址调用中接受经纬度和长期参数。我的Perl CGI脚本计算两次鼠标单击之间的距离和方位,并将数据放入一个小的单行文件中。我的用于读取小文件的javascript逻辑本身可以正常工作。我在将此逻辑添加到事件侦听器时遇到问题。这是我目前无法执行的尝试:
// Configure the click listener.
map.addListener('click',function(mapsMouseEvent) {
ret = "https://kjm.positiondatabase.com/cgi-bin/Distance?lat2=event.latLng.lat&long2=event.latLng.lng";
const fs = require('fs');
fs.readFile('/tmp/DataOUT.txt',(err,data) => {
if (err) throw err;
})
// Create a new InfoWindow.
infoWindow = new google.maps.InfoWindow({position: mapsMouseEvent.latLng});
infoWindow.setContent(data.toString());
infoWindow.open(map);
});
我假设鼠标单击的纬度和经度位置是event.latLng.lat和event.latLng.lng。 我的Perl CGI脚本没有被调用。如果我删除对Perl脚本的调用,仍然会出现问题。如果有人对我如何更正我的脚本有任何建议,我们将感谢所有建议和帮助。 谢谢,吉姆
解决方法
这里有两个主要问题。
1。您永远不会调用Perl脚本。
您要做的只是将URL放入变量中,即使没有适当的参数也没有。这只是一个字符串。没有变量插值,因此您的经度和纬度参数只是字符串event.latLng.lat
和event.latLng.lng
。
您说要计算距离,但是您只是传递(好,试图传递)一组坐标。
如果将console.log
放在ret = "..."
行之后,您会看到输出只是一个字符串,并且处理程序中的event
变量实际上称为{{1} }。
相反,您应该像这样构造该URL:
mapsMouseEvent
当然,您实际上仍然需要向后端发出请求。我留给你。
2。用户的浏览器无法读取服务器的文件系统
ret = "https://kjm.positiondatabase.com/cgi-bin/Distance?lat2=" + mapsMouseEvent.latLng.lat + "&long2=" + mapsMouseEvent.latLng.lng;
这似乎是您从NodeJS示例中复制的。这不是基于Web的基于浏览器的JS的工作原理。您的JavaScript代码在客户端计算机上的客户端浏览器中运行。这与运行Perl脚本的计算机不同。该 const fs = require('fs');
fs.readFile('/tmp/DataOUT.txt',(err,data) => {
if (err) throw err;
})
文件夹将位于客户端计算机上,而Perl脚本无法将文件放在该计算机上。
此外,出于安全原因,浏览器不允许您的JavaScript访问用户计算机上的内容(除cookie和类似内容外)。想象每个网站都可以在本地文件中翻阅。
您需要做的是使Perl脚本返回计算结果。这通常是通过/tmp
-在Perl脚本中添加到STDOUT来完成的,您可能会使用类似print
的Content-Type并将响应编码为JSON。这项技术称为AJAX,指的是XML,但现在通常使用JSON代替。阅读它,然后对后端实施异步调用,并处理其响应。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。