【发布时间】:2017-10-09 12:06:57
【问题描述】:
我正在尝试学习一项新技能,只是作为一种爱好,虽然我学到了很多东西,但我仍然对一些事情感到困惑 - 这就是其中之一。
我有一个 MongoDB,其中包含一个 DB = 电话和一个集合 = 记录,正如您可能已经猜到的那样,它们存储电话目录。我创建了一个 JSON 文件并导入了所有内容,一切顺利。
然后我创建了一个 Ruby / Sinatra 应用程序来在表格中显示数据。这一切都很好。
现在我想使用 HTML 表单向数据库提交一个新用户。我的基本测试表格如下,位于 Sinatra 公共目录中,名为 myTest.html
<form id="form">
First name:<br>
<input type="text" name="fname" value="Mickey">
<br> Last name:<br>
<input type="text" name="lname" value="Mouse">
<br><br>
<input type="submit" value="Submit" id="commit">
</form>
<script>
(我省略了 action=" ",因为我试图通过 AJAX 执行此操作,但它不起作用)这是我的 AJAX 尝试:
<script>
$(function() {
$.ajax({
url: 'http://localhost:4567/api/v1/myTest',
type: 'post',
dataType: 'json',
jsonp: 'json', // mongod is expecting the parameter name to be called "jsonp"
success: function(data) {
//console.log('success', data);
console.log("Success");
},
error: function(XMLHttpRequest, textStatus, errorThrown) {
console.log('error', errorThrown);
}
});
});
在我的 Ruby 文件 phone.rb 中,我有这个:
get '/myTest' do
result = Record.collection.insert_one({ :fname =>"Justin"})
end
我已经验证这会起作用。
我被卡住的地方是将两者连接起来(或者我什至需要连接吗?)当我点击表单上的提交按钮时,我得到一个这样的 URL 编码字符串:
localhost:4567/myTest.html?fname=Justin&lname=Smith
如何从表单中获取 URL 数据,并将其作为新文档插入 Mongo?
我花了两天时间寻找答案,但几乎所有网络上的信息都以 Rails 的形式返回,我没有使用它。我想先学习用 Ruby 做所有事情。当我从 Javascript 方面看问题时,几乎所有引用都指向 Node.js,我没有使用它。
任何帮助将不胜感激,或者至少向正确的方向点头。 谢谢
更新 我显然在我的 Ruby 中犯了一个错误——它应该是 POST。于是我新建了一个 Ruby 块,当我直接从浏览器访问它并输入 localhost/api/v1/myTest?fname=Mickey&lname=Mouse 时,它会将信息输入到数据库中
post '/myTest' do
fname = params[:fname]
lname = params[:lname]
Record.collection.insert_one({'fname' => fname, 'lname' => lname})
end
在表单上,我尝试添加以下内容:
<form id="form" method="POST" action="/myTest">
First name:<br>
<input type="text" name="fname">
<br> Last name:<br>
<input type="text" name="lname">
<br><br>
<input type="submit" value="Submit" id="commit">
</form>
<script>
$(function() {
//hang on event of form with id=myform
$("#form").submit(function(e) {
//prevent Default functionality
e.preventDefault();
//get the action-url of the form
var actionurl = '/myTest';
$.ajax({
url: actionurl,
type: 'post',
dataType: 'application/json',
data: $("#form").serialize(),
success: function(data) {
console.log('success')
}
});
});
});
</script>
我无法点击 Ruby /myTest。我不断收到“Sinatra 不知道这个 Ditty”404。难道我没有使用 Sinatra 在 Views 文件夹中将 HTML 创建为 erb?我的页面位于 Public 文件夹中,独立于 Sinatra 编写。
【问题讨论】:
标签: javascript ruby ajax mongodb sinatra