如何使用 jquery .ajax() 将 div 值从模型刷新到 django



>我有一个视图,它返回了 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视图中获取参数

最新更新