我正在使用CherryPy制作一个网页,用于客户端的服务器端,HTML,CSS和jQuery。我也在使用mySQL数据库。
我有一个工作表单供用户注册该网站 - 创建用户名和密码。我使用jQuery向CherryPy发送一个AJAX POST请求,该请求查询数据库以查看该用户名是否存在。如果用户名存在,请提醒用户,如果不存在,请将其添加到数据库并提示成功。
$.post('submit', postdata, function(data) {
alert(data);
});
成功的jQuery POST。
我想更改表单,以便在提交时检查用户名是否存在,而不是通过用户名输入在blur事件上发出GET请求。该函数被调用,它转到CherryPy,但后来我收到一条错误:HTTPError: (404, 'Missing parameters: username')
。
$.get('checkUsername', getdata, function(data) {
alert(data);
});
不成功的jQuery GET。
The CherryPy:
@cherrypy.expose
def submit(self, **params):
cherrypy.response.headers['Content-Type'] = 'application/json'
e = sqlalchemy.create_engine('mysql://mysql:pw@localhost/6470')
c = e.connect()
com1 = "SELECT * FROM `users` WHERE `username` = '" + params["username"] + "'"
b = c.execute(com1).fetchall()
if not len(b) > 0:
com2 = "INSERT INTO `6470`.`users` (`username` ,`password` ,`website` ,`key`) VALUES ('"
com2 += params["username"] + "', MD5( '" + params["password"] + "'), '', NULL);"
a = c.execute(com2)
c.close()
return simplejson.dumps("Success!")
c.close()
return simplejson.dumps("This username is not available.")
@cherrypy.expose
def checkUsername(self, username):
cherrypy.response.headers['Content-Type'] = 'application/json'
e = sqlalchemy.create_engine('mysql://mysql:pw@localhost/6470')
c = e.connect()
command = "SELECT * FROM `users` WHERE `username` = '" + username + "'"
a = c.execute(command).fetchall();
c.close()
sys.stdout.write(str(a))
return simplejson.dumps("")
我看不出两者之间有任何差异所以我不知道为什么GET请求给我一个问题。任何洞察我可能做错的事情都会有所帮助。
如果你有关于jQuery,CherryPy,配置文件等的想法,我真的很感激。
* * 编辑 * ***
在一些朋友的要求下,这里有更多信息
我如何计算getdata:
var getdata = $("#username").val();
服务器查询的URL :(嗯,这就是PuTTy所说的来自/去服务器,我不知道服务器端的废话)
GET /checkUsername?noram HTTP/1.1
答案 0 :(得分:4)
Norabora, 以下是您可以尝试的几件事......
从以下内容更改您的jQuery get请求:
$.get('checkUsername', getdata, function(data) {
alert(data);
});
以强>
var getdata = $("#username").val();
$.get('checkUsername?username=' + getdata, function(data) {
alert(data);
});
或尝试:
var un = $("#username").val();
$.get('checkUsername', { username: un } , function(data) {
alert(data);
});
查看jQuery文档,您需要提供带有JSON对象的$.get()
函数作为参数,而您当前正在为$.get()
方法提供一个字符串。
GET请求必须采用以下形式: www.somedomain.com?key=value
看起来您的GET请求缺少密钥,但仍包含值:
GET /checkUsername?noram HTTP/1.1
我希望以下方法有效:
GET /checkUsername?username=noram HTTP/1.1