Исправлено 404: ошибка пропущенных параметров из запроса GET к CherryPy - PullRequest
4 голосов
/ 13 января 2011

Я делаю веб-страницу, используя CherryPy для серверной части, HTML, CSS и jQuery на клиентской стороне.Я также использую базу данных MySQL.

У меня есть рабочая форма для пользователей, чтобы зарегистрироваться на сайте - создать имя пользователя и пароль.Я использую jQuery для отправки запроса AJAX POST в CherryPy, который запрашивает базу данных, чтобы узнать, существует ли это имя пользователя.Если имя пользователя существует, предупредите пользователя, если нет, добавьте его в базу данных и сообщите об успешном выполнении.

$.post('submit', postdata, function(data) {  
    alert(data);  
});

Успешный JQuery POST.

Я хочу изменить форму, чтобычто вместо проверки того, что имя пользователя существует при отправке, делается запрос 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

1 Ответ

4 голосов
/ 13 января 2011

Норабора, вот пару вещей, которые вы можете попробовать ...

Измените ваш запрос на получение 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
...