>我有一个视图,它返回了 3 个模型的链接对象
def test(request):
output=itertools.chain(
model1.objects.all(),
model2.objects.all(),
model3.objects.all()
)
return render_to_response('test.html', {'output':output})
在 html 中,我添加了一个锚点和一个 jQuery 脚本,它应该用 model1 中的新值替换 #output
<html>
<head>...</head>
<body>
<script>
$(document).ready(function() {
$("#switch").click(function() {
$.ajax({
url: $(this).attr("href"),
success: function(result) {
//whatever I put here is not triggered
}
});
});
});
</script>
<a id="switch" href="?model=1">switch to model 1</a>
<div id="output">
{% for item in output %}
<div id="{{item}}">
{{item}}
</div>
{% endfor %}
</div>
</body>
</html>
我尝试将div#output 放入单独的模板输出中.html并修改了 views.py,如下所示:
def test(request, template='test.html'):
if request.GET.get('model'):
output=model1.objects.all()
else:
output=itertools.chain(
model1.objects.all(),
model2.objects.all(),
model3.objects.all()
)
if request.is_ajax(): template='output.html'
return render_to_response(template, {'output':output})
但是每次我单击链接时,整个页面都会刷新(使用 model1 中的新值)。
Opera只返回输出.html
为此苦苦挣扎了 3 天多,我是 Ajax 的新手,这对我来说非常困惑。
我希望有人能有所了解!
首先,确保您的视图正常工作,并且在直接访问 url 时获得预期的 HTML 输出(您可能还想暂时注释掉if request.is_ajax()
)。
然后,尝试在 ajax 调用中使用jQuery.html()
方法替换 #outputdiv 的内容。下面是一个带有一些动画的示例:
$.ajax({
...
success: function( returnedData ) {
$("#output").css("color", "red").fadeOut(500, function() {
$("#output").html(returnedData);
$(this).css("color", "green").fadeIn(500);
});
}
另外,尝试使用Firebug/Chrome开发人员工具监视ajax调用 - 这两种工具都可以让您快速确定问题。
感谢丹尼尔·罗斯曼的提醒,我不得不阻止 a#switch 的默认操作。它现在像黄油一样工作!
这是最初的问题:如何访问jQuery.ajax()在Django视图中获取参数