jquery ajax调用未在函数调用

时间:2016-01-11 16:58:53

标签: javascript jquery ajax django

我不知道为什么这不起作用:

$.get("/some/url/", function(event) {
    alert('hey');
});

当我点击按钮时,我可以看到在Firefox的控制台中执行响应,我可以看到它成功(200 OK)。我还可以看到来自Web服务器的响应是正确的...那么为什么函数调用中的警报不起作用呢?警报在函数调用之外工作。

以下是上下文的整个块:

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js" type="text/javascript"></script>
<script src="/static/js/bootstrap.min.js" type="text/javascript"></script>
<script type="text/javascript">
    $(document).ready(function() {
        $("#some_id").click(function(event) {
            $.get("/some/url/", function(data) {
               alert('hey');
            });
        });
    });
</script>

如果有所作为,我正在使用Django。

修改 我已经将我的视图从HTTPResponse更改为JSONResponse,现在ajax调用没有失败,我可以抛出警报。感谢所有提出类型问题的人,仍然不确定为什么HTTPResponse会传递对象,但是ajax调用会认为&#34;失败&#34;。特别感谢Miguel Lattuada和JRodDynamite帮助我走上正轨。

EDIT2: 对于那些好奇的人,我的观点(Django)正在回归这个:

return HttpResponse(response, content_type='application/json')

我把它改成了这个:

return  JsonResponse(response, safe=False)

这似乎让ajax因某种原因而高兴,并使成功函数调用成功。

3 个答案:

答案 0 :(得分:1)

我的猜测是你提交你的页面。

试试这个

<!DOCTYPE html>
<html>
<head>
<title>Test</title>
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js" type="text/javascript"></script>
<script type="text/javascript">
$(function() {
  $("#some_id").on("click",function(event) {
    event.preventDefault(); // cancel the event - not needed on type=button though
    $.get("/some/url/", function(data) {
       window.console&&console.log('hey');
    });
  });
});
</script>
</head>
<body>
<button type="button" id="some_id">Click</button>
</body>
</html>

这假设来自/ some / url /的返回值是有效对象 - 控制台应该告诉你

答案 1 :(得分:0)

结果可能不是JSON格式,所以当jQuery尝试解析它时,它会失败。尝试验证JSON。

如果响应不是JSON格式,请尝试指定数据类型。如果它返回一个简单的文本,则指定text

$.get("/some/url/", function(data) {
    alert('hey');
}, "text");

答案 2 :(得分:0)

尝试使用Promise机制:

$.get("/some/url/").done(function() {
    alert( "1" );
  })
  .fail(function() {
    alert( "2" );
  })
  .always(function() {
    alert( "3" );
  });

此外,您可以使用$ .ajax()函数来测试连接是否正确