jQuery在done函数中使用此函数不';行不通

jQuery在done函数中使用此函数不';行不通,jquery,this,Jquery,This,我对ajax函数有一个问题。代码如下: <script type="text/javascript"> jQuery("#stage1 > div > div").live("click", function() { var cat=jQuery(this).parent().index() + 1; alert(cat); jQuery.ajax({ type: "GET", url: "<?

我对ajax函数有一个问题。代码如下:

<script type="text/javascript">
jQuery("#stage1 > div > div").live("click", function() {
    var cat=jQuery(this).parent().index() + 1;
    alert(cat);
    jQuery.ajax({
            type: "GET",
            url: "<?php echo get_permalink(177); ?>",
            data: {
                    curPage: <?php echo $post->ID; ?>,
                    id: cat }
    }).done(function(msg) {
        jQuery(this).html(msg);
    });
});
</script>

jQuery(#stage1>div>div”).live(“单击”,函数(){
var cat=jQuery(this.parent().index()+1;
警报(cat);
jQuery.ajax({
键入:“获取”,
url:“”,
数据:{
curPage:,
id:cat}
}).done(函数(msg){
jQuery(this).html(msg);
});
});

问题在于此处于“完成”功能中。我在firefox中有firebug,这就是为什么我知道数据是返回的,它应该显示出来,但它没有。我假设jQuery(这个)是个问题。有人知道如何在done函数中使用此
吗?

中。done()
指的是与您想要的
不同的对象。另外,请使用
.on()
而不是
.live()


jQuery(#stage1>div>div”).live(“单击”,函数(){
var cat=jQuery(this.parent().index()+1;
警报(cat);
var self=这个;
jQuery.ajax({
键入:“获取”,
url:“”,
数据:{
curPage:,
id:cat}
}).done(函数(msg){
jQuery(self).html(msg);
});
});
您可以使用
console.log(this)
检查其区别。要了解更多有关此关键字的信息,请签出jQuery(此)
在函数中不起作用,因为它引用了ajax函数。 我建议你保存你的物品prevoius,然后像这样打电话给他:

<script type="text/javascript">
jQuery("#stage1 > div > div").live("click", function() {
    var obj = this;
    var cat=jQuery(this).parent().index() + 1;
    alert(cat);

    jQuery.ajax({
            type: "GET",
            url: "<?php echo get_permalink(177); ?>",
            data: {
                    curPage: <?php echo $post->ID; ?>,
                    id: cat }
    }).done(function(msg) {
        jQuery(obj).html(msg);
    });
});
</script>

jQuery(#stage1>div>div”).live(“单击”,函数(){
var obj=这个;
var cat=jQuery(this.parent().index()+1;
警报(cat);
jQuery.ajax({
键入:“获取”,
url:“”,
数据:{
curPage:,
id:cat}
}).done(函数(msg){
jQuery(obj).html(msg);
});
});

另一种解决方案是保存id,然后使用jQuery选择元素byId,但这不能直接应用到函数中,因为
这个
没有绑定到
done()
回调中的原始元素。相反,它绑定到
$.ajaxSettings
和您传递的AJAX选项之间的混合

要保留原始上下文,可以在传递给以下对象的
上下文
选项中指定

jQuery.ajax({
背景:这,,
键入:“获取”,
url:“”,
数据:{
curPage:,
身份证:猫
}
}).done(函数(msg){
jQuery(this).html(msg);//将按预期工作。
});

您可以使用闭包:{只是另一种方式}

<script type="text/javascript">
jQuery("#stage1 > div > div").live("click", function () {
    var cat = jQuery(this).parent().index() + 1;
    alert(cat);
    (function (self) {
        jQuery.ajax({
            type: "GET",
            url: "<?php echo get_permalink(177); ?>",
            data: {
                curPage: <? php echo $post - > ID; ?> ,
                id: cat
            }
        }).done(function (msg) {
            jQuery(self).html(msg);
        });
    }(this));
});
</script>

jQuery(#stage1>div>div”).live(“单击”,函数(){
var cat=jQuery(this.parent().index()+1;
警报(cat);
(功能(自我){
jQuery.ajax({
键入:“获取”,
url:“”,
数据:{
curPage:,
身份证:猫
}
}).done(函数(msg){
jQuery(self).html(msg);
});
}(本);;
});

感谢您发布与我完全相同的答案,只需第二个quickerSO,这不是比赛。你可以发布一个更好的答案来解释他,而不是像我那样只发布代码。我非常乐意投票支持它。live()不受欢迎。
jQuery.ajax({
    context: this,
    type: "GET",
    url: "<?php echo get_permalink(177); ?>",
    data: {
        curPage: <?php echo $post->ID; ?>,
        id: cat
    }
}).done(function(msg) {
    jQuery(this).html(msg);  // Will work as expected.
});
<script type="text/javascript">
jQuery("#stage1 > div > div").live("click", function () {
    var cat = jQuery(this).parent().index() + 1;
    alert(cat);
    (function (self) {
        jQuery.ajax({
            type: "GET",
            url: "<?php echo get_permalink(177); ?>",
            data: {
                curPage: <? php echo $post - > ID; ?> ,
                id: cat
            }
        }).done(function (msg) {
            jQuery(self).html(msg);
        });
    }(this));
});
</script>