修复404:从GET请求到CherryPy缺少参数错误
我正在使用CherryPy作为服务器端,HTML,CSS和jQuery在客户端的网页。我也在使用mySQL数据库。修复404:从GET请求到CherryPy缺少参数错误
我有一个用户注册该网站的工作表单 - 创建一个用户名和密码。我使用jQuery向CherryPy发送一个AJAX POST请求,CherryPy查询数据库以查看该用户名是否存在。如果用户名存在,请提醒用户,如果不存在,请将其添加到数据库并提醒成功。
$.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。
的CherryPy的:
@cherrypy.expose
def submit(self, **params):
cherrypy.response.headers['Content-Type'] = 'application/json'
e = sqlalchemy.create_engine('mysql://mysql:[email protected]/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:[email protected]/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由服务器查询:(好吧,这是腻子说是从/去服务器端传来的,我不知道服务器端废话)GET /checkUsername?noram HTTP/1.1
Norabora, 这里有一些事情你可以试试... ...
改变你的jQuery得到以下请求:
$.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的文档,你需要提供$.get()
功能用JSON对象作为参数,而你目前正在提供仅使用字符串的$.get()
方法。
GET请求需要的形式为: www.somedomain.com?键=值
它看起来像你的GET请求缺少的关键,但仍包含值:
GET /checkUsername?noram HTTP/1.1
我希望下面的工作:
GET /checkUsername?username=noram HTTP/1.1
真棒,它的工作。谢谢! – 2011-01-13 15:13:29
如果你在写url http:// yourserver/checkusername?username = something。它工作吗?如果是这样,告诉我们什么是你的getdata参数 – sirrocco 2011-01-13 04:50:59