ajax成功函数没有运行jquery - 但是控制台说不然

时间:2014-03-19 05:16:30

标签: jquery ajax json

我有这段代码

    $('a.like').on('click', function(e){
        e.preventDefault();
        var object_id = $(this).data('id');
        var token = $(this).data('token');
        var like = $(this);
        $.ajax({
            url: '{{URL::to('likes')}}',
            type: 'post',
            data: "object_id="+object_id+"&_token="+token,
            datatype: 'json'
        })
        .done(function(data)
        {
            if (data.success)
            {
                var likes = data.count;
                $(like).removeClass('like').addClass('unlike').attr('title', 'Un-Like this Object');
                $(like).next('i').removeClass('not-liked').addClass('liked');
                $(like).next('span').text(likes);
            }
        });         
    });

由于某种原因我的if (data.success)没有被运行。我完成了console.log(data),我得到了以下内容

{"success":true,"count":1}

我还控制台记录了like变量,它返回页面上的正确元素。不确定是什么问题。这是ajax运行之前的元素。

<a data-token="7183FdwgLl23Nfq9heOdMYEjmqe9ELtGXCrxUpbu" data-id="92" class="like" title="Like this Object" href="#"><i class="fa fa-heart not-liked"></i>&nbsp;<span class="count">0</span></a>

P.S。 - 当它被发布时,一切都在服务器端顺利运行,它返回一个正确格式化的JSON响应。

3 个答案:

答案 0 :(得分:0)

尝试:

$(this).removeClass('like').addClass('unlike').attr('title', 'Un-Like this Object');
$(this).find('i').removeClass('not-liked').addClass('liked');
$(this).find('span').text(likes);

'a'标签包含元素“i”和“span”,因此next()将不起作用。

答案 1 :(得分:0)

JSFiddle示例http://jsfiddle.net/8uwYS/

(json部分只是为了得到好的答案)。

更新:

    type: 'POST',
    dataType: 'json'

        like.removeClass('like').addClass('unlike').attr('title', 'Un-Like this Object');
        like.find('i').removeClass('not-liked').addClass('liked');
        like.find('span').text(likes);

答案 2 :(得分:0)

jQuery的Ajax https://api.jquery.com/jQuery.ajax/

如果complete未被调用,您可以尝试聆听success事件。
此外,你有错别字。 type应为POSTdatatype应为dataType 同样,ispanlike的子项。

$('a.like').on('click', function(e){
    e.preventDefault();
    var object_id = $(this).data('id');
    var token = $(this).data('token');
    var like = $(this);
    $.ajax({
        url: '{{ URL::to('likes') }}',
        type: 'POST',
        data: JSON.stringify({"object_id": object_id, "_token": token}),
        dataType: 'json',
        success: function (data) {
            like.removeClass('like')
                .addClass('unlike')
                .attr('title', "Unlike this object.");

            like.children('i').removeClass('not-liked').addClass('liked');
            like.children('span').text(data.count);
        }
    });
});