0

問題

AJAX 呼び出しが成功した後、ページ上の要素を更新したいと考えています。ただし、更新されていません。

コード [Javascript]

$(function()
{
    $(".upvote").click(function()
    {
        var id = $(this).parent().find("input").val();
        $.ajax(
        {
            type: "GET",
            url: "process.php",
            data: "id=" + id +"&f=u",

            success: function(results)
            {
                $(this).parent().parent().find("span.ups").empty().append("Upvotes: " + results);
                console.log(results);
            }
        });
        return false;
    });
});

コード [HTML]

このコードは PHP によって生成されています。

<div class="post">
    <h2>$title</h2>
    <p>$body</p>
    <span class="ups">Upvotes: $upvotes</span>
    <span class="downs">Downvotes: $downvotes</span>
    <span class="total">Total votes: $t_votes</span>
    <div id="links">
        <input type="hidden" id="id" name="id" value="$id">
        <a href="process.php?id=$id&f=u" class="upvote"><button>Upvote!</button></a>
        <a href="process.php?id=$id&f=d" class="downvote"><button>Downvote!</button></a>
    </div>
</div>

PHP によって返される

賛成票の更新された数。

4

3 に答える 3

7

thisあなたがそうであると思うものではありません。その値は、それが表示される関数がどのように呼び出されるかによって決まります (別の関数内では変化します)。

jQuery 成功コールバックでそれがどうなるかはわかりませんが、HTML 要素にはなりません。

クリックされた要素にしたい場合thisは、その要素である間に保存する必要があります。

$(".upvote").click(function() {
    var clicked_element = this;

その後、後でその変数を使用できます。

$(clicked_element).parent().etc
于 2013-01-07T14:12:07.100 に答える
4

thisそのようなキーワードは使用できません。

var that = null;

$(function()
{
    $(".upvote").click(function()
    {
        var id = $(this).parent().find("input").val();
        that = $(this);
        $.ajax(
        {
            type: "GET",
            url: "process.php",
            data: "id=" + id +"&f=u",

            success: function(results)
            {
                that.parent().parent().find("span.ups").empty().append("Upvotes: " + results);
                console.log(results);
            }
        });
        return false;
    });
});

私はこれをテストしませんでしたが、うまくいくはずです。

乾杯。

于 2013-01-07T14:12:20.533 に答える
1

$(this)コールバックの内部はsuccess、あなたが考えるかもしれない要素ではありません。代わりに親オブジェクトをキャッシュし、そこからトラバースする方がおそらく良いでしょう:

var $post = $('.post');

//... $.ajax etc

success: function() {
    $post.find('.ups').etc //...
于 2013-01-07T14:12:18.233 に答える