【问题标题】:'data' function not hit in seemingly successful jquery post在看似成功的 jquery 帖子中未命中“数据”功能
【发布时间】:2015-01-22 15:10:23
【问题描述】:

为什么下面的 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:连接重置

【问题讨论】:

  • 总的来说,我想知道一种更好的方法来调试这些 ajax 帖子,而不是到处留下警报地雷
  • 请将您的解决方案移至自己的答案,谢谢。

标签: jquery ajax django post


【解决方案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 一样逐步执行。

【讨论】:

  • 谢谢。我一直在使用firebug,我的老板指出使用更新版本可能会更好,他是对的。此外,他在 Firefox>developer>browser 控制台上给了我提示。这对于调试 js 真的很有用
  • 是的,因此“大多数现代浏览器都带有控制台来检查和监视所有网络请求和 javascript 代码。” :) 很高兴你能弄明白!
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-23
    • 2010-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-22
    • 1970-01-01
    相关资源
    最近更新 更多