我想将变量id
发布到网页上。我正在尝试以下代码,但我无法获取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);
}
});
}
在以下代码中调用此函数。在以下代码中,ID也会发布到页面votes.php
,并且工作正常,但在上面的代码中,当我尝试将ID发布到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>
我会批评任何帮助。
答案 0 :(得分:2)
如果您尚未安装firebug,我认为您应该先安装{。}}。
接下来我将id输出到console:
var id=$(this).attr("id");
console.log(id);
id很可能不是你想象的那样。如果正确,那么你可以继续阅读。
来自jquery文档
示例:提示结果 请求test.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 :(得分:1)
这里的问题是在AJAX事件处理程序的上下文中this
是什么。你的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
不是事件处理程序中的元素。相反,它是来自AJAX请求的XMLHTTPRequest
对象。您需要在事件处理程序之外缓存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);
}
});