1

我有一个返回 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 脚本,它应该将 #output 替换为来自 model1 的新值

<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 放入单独的模板 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 只返回 output.html

已经为此苦苦挣扎了 3 天多,我是 Ajax 的新手,这让我感到非常困惑。

我希望有人能解释一下!

4

2 回答 2

1

首先,确保您的视图正常工作,并且在直接访问 url 时获得预期的 HTML 输出(您可能还想if request.is_ajax()暂时注释掉)。

jQuery.html()然后,尝试使用ajax 调用中的方法替换 #output div 的内容。这是一个带有一些动画的示例:

$.ajax({

    ...
    success: function( returnedData ) {
        $("#output").css("color", "red").fadeOut(500, function() {
            $("#output").html(returnedData);
            $(this).css("color", "green").fadeIn(500);
        });
    }

此外,尝试使用 Firebug/Chrome 开发人员工具监控您的 ajax 调用 - 这两种工具都可以让您快速确定问题。

于 2012-04-30T23:44:20.320 回答
0

感谢 Daniel Rosman 的提醒,我不得不阻止 a#switch 的默认操作。它现在像黄油一样起作用!

这是最初的问题:如何在 Django 视图中访问 jQuery.ajax() 获取参数

于 2012-05-01T09:04:16.740 回答