Django / Ajax 刷新不起作用

2024-06-17 12:25:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我已经建立了一个保存按钮。用户单击“保存”按钮将记录保存到其集合中。这会将“保存”按钮文本更改为“已保存”。然后用户可以单击“保存”取消保存记录。你知道吗

用户可以成功地保存记录,ajax通过将id="likes"更改为id="unsave"来按预期更新html。你知道吗

问题是ajax没有获取 id="unsave" so is not routing to the ^{}URL,而是路由到save_releaseURL。你知道吗

Url示例

http://127.0.0.1:8000/save_release/?release_id=585197&num_saves=14http://127.0.0.1:8000/unsave_release/?release_id=585197&num_saves=14

在用户进行初始保存之后,是否需要以某种方式重置ajax?你知道吗

型号.py

@login_required
def save_release(request):

    release_id = None
    num_saves = None
    username = request.user.username
    if request.method == 'GET':
        release_id = request.GET['release_id']
        num_saves = request.GET['num_saves']

    if release_id:

        insert = ChartsExtended(release_id=release_id,artist=username,url='Like',date='date',type='U',source='net')
        insert.save()
        num_saves = str(int(num_saves) + 1)
        return HttpResponse(num_saves)

@login_required
def unsave_release(request):

    release_id = None
    num_saves = None
    username = request.user.username
    if request.method == 'GET':
        release_id = request.GET['release_id']
        num_saves = request.GET['num_saves']

    if release_id:

        insert = ChartsExtended.objects.get(release_id=release_id,artist=username)
        insert.delete()
        num_saves = str(int(num_saves) - 1)
        return HttpResponse(num_saves) 

阿贾克斯.js

$(document).ready(function() {

        // JQuery code to be added in here.
        $('#likes').click(function(){
            var release_id;
            var num_saves;
            release_id = $(this).attr("data-releaseid");
            num_saves = $(this).attr("data-numsaves")
            $.get('/save_release/', {release_id: release_id,num_saves: num_saves}, 

                function(data){

                $('#like_count').html(data + " people saved this");

                // $('#likes').css({"background-color":"#FF0000"});

                $('#likes').toggleClass("btn-info");
                $('#likes').text('Saved!')
                $('#likes').attr('id','unsave');
            });
        });

        //this unsaves a release from Release
        $('#unsave').click(function(){
            var release_id;
            var num_saves;
            release_id = $(this).attr("data-releaseid");
            num_saves = $(this).attr("data-numsaves")
            $.get('/unsave_release/', {release_id: release_id,num_saves: num_saves}, 

                function(data){

                $('#like_count').html(data + " people saved this");

                // $('#likes').css({"background-color":"#FF0000"});

                $('#unsave').toggleClass("btn-success");
                $('#unsave').text('Save')
                $('#unsave').attr('id','likes');
            });
        });

发布.html

<h3 id="like_count">{{dict_item.cnt}} people saved this</h3>


  <p><button id="likes" data-releaseid="{{ dict_item.id }}" data-numsaves="{{dict_item.cnt}}" class="btn btn-xlarge btn-success release-follow-buttons" type="button">Save</button></p>

在用户单击“保存”后将转换为以下内容

<p><button id="unsave" data-releaseid="release_id" data-numsaves="num_saves" class="btn btn-xlarge btn-success release-follow-buttons btn-info" type="button">Saved!</button></p>

网址.py

url(r'^save_release/$', views.save_release, name='save_release'),
url(r'^unsave_release/$', views.unsave_release, name='unsave_release'),

Tags: iddatagetreleaserequestsaveusernamebutton
1条回答
网友
1楼 · 发布于 2024-06-17 12:25:40

这是因为当您在id为unsave的元素上附加onclick处理程序时,该元素当时不存在,处理程序也没有附加。你知道吗

您要么需要在更改id时附加处理程序,要么更好的解决方案是使用delegated event handlers。你知道吗

$(document).on("click", "#likes", function() {
    // code
});
$(document).on("click", "#unsave", function() {
    // code
});

您也不需要在ready回调中附加这些委托事件,因为这样做时#likes#unsave元素不必存在。你知道吗

相关问题 更多 >