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

时间:2011-01-13 00:49:40

标签: jquery ajax json cherrypy http-status-code-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。

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

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