2011-01-13 171 views
4

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

回答

4

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