Javascript web.input()不接受表单数据
所以我尝试创建一个简单的注册表,让用户输入他们的信息,然后提交处理。我在获取表单数据时遇到问题。按照站点的设置方式,我得到了“/register”表单,然后将ajax请求发送到url“/postregister”。从那里,输入从web.input()获取数据的类,然后根据需要引用数据。或者至少这是我的意图 我遇到的问题在于第一步:从“/register”页面获取表单数据。实际上什么都没有传递 这是register.htmlJavascript web.input()不接受表单数据,javascript,python,forms,input,web.py,Javascript,Python,Forms,Input,Web.py,所以我尝试创建一个简单的注册表,让用户输入他们的信息,然后提交处理。我在获取表单数据时遇到问题。按照站点的设置方式,我得到了“/register”表单,然后将ajax请求发送到url“/postregister”。从那里,输入从web.input()获取数据的类,然后根据需要引用数据。或者至少这是我的意图 我遇到的问题在于第一步:从“/register”页面获取表单数据。实际上什么都没有传递 这是register.html <div class="container"> &l
<div class="container">
<h2>Register Account</h2>
<br /><br />
<form id="register-form">
<div class="form-group label-static is-empty>
<label for="username" class="control-label">Username</label>
<input id="username" class="form-control" type="text" placeholder="Choose a username..."/>
</div>
<button type="submit" class="btn btn-info">Submit </button>
</form>
</div>
加上js:
$(document).ready(function() {
console.log("loaded");
$(document).on("submit", "#register-form", function(e) {
e.preventDefault();
var form = $("#register-form").serialize();
console.log(form); //This is just for debugging
$.ajax({
url: '/postregistration',
type: 'POST',
data: form,
success: function(response){
console.log(response);
}
});
});
});
当我运行controller.py并导航到localhost:8080/register时,系统会提示我填写表单。成功!现在我输入信息并单击提交问题检查控制台日志时,表单实际上没有被捕获。将引发一个“AttributeError”,其中AttributeError:“username”。果然,controller.py打印:
data: <storage {}>
数据:
所以我看到web.input()不获取任何数据。再往回看,在web控制台中,我可以看到“loaded”被写入,然后当我单击submit时,我可以看到一些东西(但实际上什么都没有)被写入控制台。同样,所有迹象都表明我没有抓取表单数据。你知道我哪里出错了吗?我认为你的jQuery选择器错了:
var form=$(“寄存器表单”).serialize()代码>
应该是
var form = $("#register-form").serialize();
这可能会导致没有为.serialize()选择要序列化的元素。缩进错误:
class PostRegistration:
def POST(self):
data = web.input()
print "data: " + str(data) # This line is for debugging
return data.username
需要:
class PostRegistration:
def POST(self):
data = web.input()
print "data: " + str(data) # This line is for debugging
return data.username
在jquery端,.serialize()
将忽略所有没有名称
属性的输入。这就是为什么你没有收到任何通过电线发送的东西
解决方案是将name='username'
添加到输入中。序列化方法似乎忽略了所有字段,因为它们不包含name属性。如果将其添加到注册表项中,如下所示:
<div class="form-group label-static is-empty">
<label for="username" class="control-label">Username</label>
<input id="username" class="form-control" type="text" name="username" placeholder="Choose a username" />
</div>
用户名
然后将填充表单变量。当尝试访问具有行数据的字段时,仍然返回500错误。用户名
资料来源:
这一变化没有影响。我从你的源代码中看出了我的错误,但它并没有解决问题。我不是Python方面的专家,但是你的问题是否会因为类后注册中“return data.username”的缩进而产生?从我对Python的了解来看,您似乎在POST(self)函数之外调用了return。感谢您的反馈。缩进“return data.username实际上是正确的。由于上面的print语句,这可能看起来很奇怪,但我相信问题出在主python控制器中最终返回语句之前的某处。我道歉。我不太明白你指出的错误。关于缩进错误,您是正确的。除此之外,它仍然不能按预期工作。你是对的。我没有复制和粘贴代码,而是键入代码以便可以单独查看每一行。您对我的语法所做的更正并没有改变数据仍然没有从表单中捕获任何信息的事实。非常感谢您的这篇文章。这就成功了。我想下次我会更努力地寻找我问题的答案。谢谢您是否能够修复data.username行中的500错误?我仍然坚持这一点是的。通过在HTML文件中添加name=“username”属性,它工作得非常好。我现在可以接受用户输入并将其发送到我的MongoDB。
<div class="form-group label-static is-empty">
<label for="username" class="control-label">Username</label>
<input id="username" class="form-control" type="text" name="username" placeholder="Choose a username" />
</div>