ruby-on-rails - Rails前端尝试将自动生成的数据保存到没有表单的数据库中
问题描述
我是 ruby on rails 的新手。我正在尝试将自己生成的数据保存到数据库中。我调查并发现我打算使用 ajax,但是我看到的所有视频/论坛都是使用表单而不是刷新页面的 ajax 示例。我想自动保存数据而不按提交。
假设该项目是一个以 postgresql 作为数据库的新项目。我创建了一个可以使用 postgis 保存地理点的数据库。我创建了另一个页面,其中实现了地图,我可以在其中手动定位位置。我想将手动固定的位置保存到数据库中。
function onMapClick(e) {
alert("You clicked the map at " + e.latlng);
}
mymap.on('click', onMapClick);
var popup = L.popup();
function onMapClick(e) {
popup
.setLatLng(e.latlng)
.setContent("You clicked the map at " + e.latlng.toString())
.openOn(mymap);
}
mymap.on('click', onMapClick);
e.latlng 保存地理点,但如果用户单击地图上的任何位置,我不知道如何将其保存到数据库中。
解决方案
您不需要提交表单即可使用 ajax。基本上你想要的是向地图添加事件侦听器,当用户单击时,将 ajax 请求发送到控制器。
例如,假设您的地图位于 id 为 my-map 的 div 中。如果你使用 jQuery,你可以这样写:
$('#my-map').on('click', function() {
# add your logic here
$.ajax({
url: 'your-url',
type: 'POST',
dataType: 'json',
contentType: "application/json; charset=utf-8",
data: JSON.stringify({
'let': data you want to send to backend
})
}
希望它有效!
编辑:
在查看了您的代码后,我发现您的项目中不能有 jQuery,因此您不能使用 jQuery ajax。你需要使用香草 javascript。所以代替上面的这个片段,你可以写这个。
var xhttp = new XMLHttpRequest();
const params = { saving_location: { geoPoints: e.latlng } }
xhttp.onreadystatechange = function() {//Call a function when the state changes.
if(xhttp.readyState == 4 && xhttp.status == 200) {
alert(http.responseText);
}
}
xhttp.open("POST", "/saving_locations", true);
xhttp.setRequestHeader('Content-Type', 'application/json', 'Accept', 'application/json');
xhttp.send(JSON.stringify(params));
还要添加protect_from_forgery with: :null_session
您的应用程序控制器和skip_before_action :verify_authenticity_token
您的保存位置控制器。(在 before_action 下)。这是一篇很好的博客文章,为什么你需要这个https://blog.nvisium.com/understanding-protectfromforgery
请注意,您不想保存数据库,因为您在数据库中的 geoPoints 类型是点类型,并且您将字符串发送到 rails 控制器。我从不使用rails中的点,所以在这里我无法为您提供帮助。(您始终可以在db中添加两列,一列用于经度,一列用于纬度,然后存储数字而不是点)
推荐阅读
- c# - 确保 Polly 策略至少运行一次
- jmeter - Jmeter - 通过命令行运行测试 - 如何将循环计数设置为无限
- php - 如果 element 为 null,则不会使用关键字 array() 将其添加到数组中,如何?
- php - laravel中的xml站点地图错误类PageContext
- javascript - 自定义 Hubspot 表单错误消息(使用 react.js)
- java - 使用 jooq 插入区间数据
- spring-data-rest - Spring Data Rest:预期 4xx 时出现 500 错误
- tensorflow - Tensorflow 2 Metrics 使用 2 个 GPU 产生错误的结果
- c++ - 范围检查超出范围访问 - C++
- javascript - Chrome 地理定位传感器破坏 CORS