修复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

+0

如果你在写url http:// yourserver/checkusername?username = something。它工作吗?如果是这样,告诉我们什么是你的getdata参数 – sirrocco 2011-01-13 04:50:59

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 
+0

真棒,它的工作。谢谢! – 2011-01-13 15:13:29