我不知道为什么这不起作用:
$.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因某种原因而高兴,并使成功函数调用成功。
答案 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()函数来测试连接是否正确