AJAX POST не работает, не могу понять, почему - PullRequest
2 голосов
/ 31 октября 2010

У меня есть простая функция AJAX для отправки идентификатора объекта на страницу php

Моя функция выглядит следующим образом:

$(function(){      
    $("a.vote").click(function(){
        //get the id
        the_id = $(this).attr('id');
        alert(the_id);

        //ajax post
        $.ajax({
            type: "POST",
            data: "?id="+the_id,
            url: "vote.php",
            success: function(msg)
            {
                $("span#message"+the_id).html(msg);
            }
        });
    });
});

Мой voice.php выглядит следующим образом:

session_start();
if(isset($_SESSION['user'])) {
    // db setup removed

    // insert vote into db
    $q = "UPDATE votes SET vote = vote + 1 WHERE id = " . $_POST['id'];   
mysql_query($q);      
echo "You sent " . $_POST['id'];
}

Когда я выполняю свою функцию AJAX, кажется, что voice.php никогда не запускается

Я знаю, что моя функция AJAX вызывается правильно, потому что alert (the_id);появляется с правильным идентификатором.

Я знаю, что мой voice.php работает правильно, потому что я могу запустить метод HTML = "post" с текстовым полем с именем "id", и он будет корректно обновлять базу данных.

Кто-нибудь может увидеть, что не так?

Спасибо

Ответы [ 3 ]

4 голосов
/ 31 октября 2010

Вы пытаетесь отправить ваши переменные в URL, а не как переменные POST.Должно быть что-то вроде:

$(function(){      
    $("a.vote").click(function(){
        //get the id
        var the_id = $(this).attr('id');
        alert(the_id);

        //ajax post
        $.ajax({
            type: "POST",
            data: {id:the_id},
            url: "vote.php",
            success: function(msg)
            {
                $("span#message"+the_id).html(msg);
            }
        });
    });
});

Ваши данные должны быть как объекты, а не как строковые URL.Посмотрите примеры на странице jquery API для получения дополнительной информации об этом!

2 голосов
/ 31 октября 2010

Главное, что я вижу в вашем коде, который выглядит неправильно, это data: "?id="+the_id,. ? является ненужным и нелогичным для почтового запроса. Вместо этого выполните следующее:

data: {
    id: the_id
}

Это позволяет jQuery выполнять кодировку URL для вас.

В качестве дополнительного пункта вы набираете $(this).attr(id). Это очень неэффективно. Вместо этого выполните this.id, чтобы получить точно такой же эффект * в 1010 * раз в сотни раз быстрее как минимум в 20 раз быстрее .

1 голос
/ 31 октября 2010

Ваше значение data не должно нуждаться в вопросительном знаке в начале.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...