【问题标题】:Fix a 404: missing parameters error from a GET request to CherryPy修复 404:对 CherryPy 的 GET 请求中缺少参数错误
【发布时间】:2011-06-08 05:23:15
【问题描述】:

我正在为服务器端使用 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

【问题讨论】:

标签: jquery ajax json cherrypy http-status-code-404


【解决方案1】:

诺拉波拉, 您可以尝试以下几件事...

从以下更改您的 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?key=value

您的 GET 请求似乎缺少键,但仍包含值:

GET /checkUsername?noram HTTP/1.1

我希望以下工作:

GET /checkUsername?username=noram HTTP/1.1

【讨论】:

    猜你喜欢
    • 2017-11-13
    • 2021-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多