2

我对 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>

问题在于this完成功能。我在 Firefox 中有萤火虫,这就是为什么我知道数据已返回,它应该显示,但它没有。我认为jQuery(this)是一个问题。有人知道如何this在完成功能中使用吗?

4

4 回答 4

3

thisinside.done()指的是与您想要的不同的对象this。另外,使用.on()代替.live()

<script type="text/javascript">
jQuery("#stage1 > div > div").live("click", function() {
    var cat=jQuery(this).parent().index() + 1;
    alert(cat);
    var self = this;
    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);
    });
});
</script>

您可以使用console.log(this)来检查它的不同之处。要阅读有关this关键字的更多信息,请查看MDN

于 2013-05-28T10:27:24.177 回答
2

jQuery(this)不适用于完成的函数,因为它引用了 ajax 函数。我建议你先保存你的对象,然后像这样称呼他:

<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>

其他解决方案是保存 id,然后使用 jQuery 选择元素 byId,但这不能直接用于您的函数

于 2013-05-28T10:29:45.957 回答
0

那是因为this未绑定到done()回调中的原始元素。相反,它绑定到$.ajaxSettings您传递的 AJAX 选项之间的混合。

要保留原始上下文,您可以在传递给$.ajax()this的选项中指定:context

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.
});
于 2013-05-28T10:29:47.750 回答
0

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

<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>
于 2013-05-28T10:30:55.637 回答