为什么以下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:连接重置
答案 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:连接重置