размещение переменной с помощью jquery и получение ее на другой странице - PullRequest
0 голосов
/ 01 января 2011

Я хочу опубликовать переменную id на странице. Я пытаюсь следующий код, но я не могу получить значение идентификатора, он говорит undefined.

function box(){
    var id=$(this).attr("id");

    $("#votebox").slideDown("slow");
    $("#flash").fadeIn("slow");

    $.ajax({
        type: "POST",
  //I want to post the "id" to the rating page.
        data: "id="+$(this).attr("id"),
        url: "rating.php",
        success: function(html){
            $("#flash").fadeOut("slow");
            $("#content").html(html);
        } 
    });
}

Эта функция вызывается в следующем коде. В следующем коде идентификатор также размещен на странице votes.php, и он работает нормально, но в приведенном выше коде, когда я пытаюсь опубликовать идентификатор на странице rating.php, он не отправляется.

$(function(){
$("a.vote_up").click(function(){

the_id = $(this).attr('id');
$("span#votes_count"+the_id).fadeOut("fast");
$.ajax({
        type: "POST",
        data: "action=vote_up&id="+$(this).attr("id"),
        url: "votes.php",
        success: function(msg)
        {
            $("span#votes_up"+the_id).fadeOut();
            $("span#votes_up"+the_id).html(msg);
            $("span#votes_up"+the_id).fadeIn();
            var that = this;
            box.call(that); 
        }
    });
});       
 });

rating.php

<?
$id = $_POST['id'];
echo $id;
?>

HTML-часть:

<a href='javascript:;' class='vote_up' id='<?php echo $row['id']; ?>'>Vote Up!</a>

Я буду признателен за любую помощь.

Ответы [ 2 ]

2 голосов
/ 01 января 2011

Если вы не установили firebug , то я думаю, что вы должны сделать это в первую очередь.

Затем я бы вывел id на консоль:

var id=$(this).attr("id");
console.log(id);

Может бытьхороший шанс, что id - это не то, что вы думали.Если все правильно, вы можете продолжить чтение.

Из документации jquery

Пример: вывести результаты запроса request.php с дополнительной полезной нагрузкой:данные (HTML или XML, в зависимости от того, что было возвращено).

$.post("test.php", { name: "John", time: "2pm" },
   function(data){
     alert("Data Loaded: " + data);
   });

Это может работать:

$.post("rating.php", { id: id }, function(data) {
  console.log(data);
});
1 голос
/ 01 января 2011

Проблема здесь в том, что this находится в контексте обработчика событий AJAX. Ваш AJAX:

$.ajax({
    type: "POST",
    data: "action=vote_up&id="+$(this).attr("id"),
    url: "votes.php",
    success: function(msg)
    {
        $("span#votes_up"+the_id).fadeOut();
        $("span#votes_up"+the_id).html(msg);
        $("span#votes_up"+the_id).fadeIn();
        var that = this;
        box.call(that); 
    }
});

В обработчике success this не является элементом в обработчике событий. Вместо этого это XMLHTTPRequest объект из запроса AJAX. Вам нужно кэшировать that вне обработчика событий:

var that = this;
$.ajax({
    type: "POST",
    data: "action=vote_up&id="+$(this).attr("id"),
    url: "votes.php",
    success: function(msg)
    {
        $("span#votes_up"+the_id).fadeOut();
        $("span#votes_up"+the_id).html(msg);
        $("span#votes_up"+the_id).fadeIn();
        box.call(that); 
    }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...