'数据'功能没有打成看似成功的jquery帖子

时间:2014-11-24 19:36:13

标签: jquery ajax django post

为什么以下jquery .post成功函数不起作用或我如何检查它为什么不起作用:

    $('#delete_visit').click(function(){
    var vg_id = $("#id_visit_select").val();//select visit from a dropdown
    $.post('{% url 'study.views.delete_visit' %}', 
    //posting to django view, this seems to work
    { v_id: v_id  },
    function(data){
    if (data){
    alert('data posted');
    //not hit, even though seems like django view succesfully deletes visit
    }
    else{
    alert('data post failure');
    //also not hit
    }
    }
    );//end post
    });//end click

Django观点:

    def delete_visit(request):
        v_id=request.POST['v_id']
        if v_id:
            v_obj=Visit.objects.get(id=v_id)
            print v_obj.id, 'it works!' # this all prints
            v_obj.delete()
        return HttpResponse('a')

解决

我发现了这个问题 - 这对我来说非常愚蠢。我的点击目标是带有'#'的href链接,因为我的点击功能中没有preventDefault,它在数据发布之前刷新了,我收到了错误代码10054:连接重置

2 个答案:

答案 0 :(得分:1)

有许多工具可以帮助调试这些类型的情况。

如果我要开始调试此问题,我首先会查看服务器上可能存在的任何错误日志,并查看是否有任何异常。如果一切顺利,我会使用名为' pdb' (https://docs.python.org/2/library/pdb.html)并在视图的开头插入一个断点,并逐步执行每行代码以验证所有是否正常工作...

def delete_visit(request):
        import pdb; pdb.set_trace()
        v_id=request.POST['v_id']
        if v_id:
            v_obj=Visit.objects.get(id=v_id)
            print v_obj.id, 'it works!' # this all prints
            v_obj.delete()
        return HttpResponse('a')

如果所有检查都很好,那么现在是时候查看客户端代码,看看那里发生了什么。大多数现代浏览器都配有控制台来检查和监控所有网络请求和JavaScript代码。我首先看看记录的网络请求,看看你的ajax请求实际返回了什么。它可能返回一个非成功的代码,如500或404.如果是这种情况,那么你的$ .post函数所用的jQuery回调函数不会被调用,因为它只在成功响应时执行

关于是否有更好的方法来调试ajax,请尝试插入语句' debugger;'或者在浏览器开发工具中放置一个断点,以便像pdb一样执行步骤。

答案 1 :(得分:0)

我发现了问题-就我而言这很愚蠢。我的点击目标是带有'#'的href链接,并且因为我的点击功能中没有preventDefault,因此它在数据发布之前正在刷新,并且我收到了错误代码10054:连接重置