修复从GET请求到CherryPy的404:缺少参数错误

我正在使用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。

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

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()函数作为参数,而您目前只使用String提供$.get()方法。


GET请求必须采用以下forms:www.somedomain.com?key = value

看起来您的GET请求缺少密钥,但仍包含值:

 GET /checkUsername?noram HTTP/1.1 

我希望以下工作:

 GET /checkUsername?username=noram HTTP/1.1