【问题标题】:Django - Ajax without JQuery libDjango - 没有 JQuery 库的 Ajax
【发布时间】:2015-08-17 05:03:41
【问题描述】:

我正在学习和使用没有 jQuery Lib 的 Ajax。我创建了一个简单的视图,它在模板上呈现一个随机数。我添加了一个按钮并调用了 ajax 函数。但是,单击按钮不会更改屏幕上的值。我检查了 DOM (firebug),它显示 someText.responseText 正在产生整个 html 而不仅仅是值,但是它在该 HTML 中具有新值。我分享这个是为了提供更多关于我到目前为止发现的信息。我对此很陌生,并且对前进行了很多实验;我检查了“request.is_ajax():”,但不知何故,视图在请求中找不到 ajax。我已经在命令行上打印了请求,但 GET querydict 是空的。

显然我没有以正确的方式为 Django 做某事。请协助。

我有意见;

def home(request):
    rand_num = random.randint(1,100)
    return render(request, 'home.html', {'rand_num':rand_num})

还有html和脚本;

<html>
<head>
<script type='text/javascript'>
    var someText;
    function helloWorld(){
        someText = new XMLHttpRequest();
        someText.onreadystatechange = callBack;

        someText.open("GET", "{% url 'home' %}", true);
        someText.send();
    };

    // When information comes back from the server.
    function callBack(){
        if(someText.readyState==4 && someText.status==200){
            document.getElementById('result').innerHtml = someText.responseText;
        }
    };
</script>

</head>
<body>
<div id="result">{{rand_num}}</div>
<input type='button' value='Abraca dabra!' onclick="helloWorld()"/>

</body>
</html>

这是该视图的网址;

url(r'^$', 'socialauth.views.home', name='home'), 

我是从在线教程中学习的。

【问题讨论】:

    标签: javascript ajax django django-templates django-views


    【解决方案1】:

    那是因为您的 AJAX 端点是整个视图 - 即您的 AJAX 请求要求提供整个呈现的模板。

    您想要的只是一个数字,因此创建一个新视图和 URL 以仅返回该数字,并向其发出 AJAX 请求。

    AJAX 没有什么特别之处,它只是一种向 URL 发出异步请求并获取返回内容的方法。

    作为参考,使用类似 JSONResponse 的视图:

    from django.http import JsonResponse
    
    def get_random_number_json(request):
        random_no = random.randint(1,100)
        return JsonResponse({'random_no': random_no})
    

    然后在您的前端 Javascript 中,获取该视图的 url,这将通过您的 AJAX 调用只为您提供 javascript 变量中的 JSON,而不是所有 document.getElementById('result') 处理,您可以从 json 中获取变量对象。

    【讨论】:

    • 感谢您的回复。我也这么认为,并尝试取出信息,但无法。你能就此提出一些建议吗?此外,即使我获得了该值,我认为该值仍然不会呈现在页面上,因为在当前情况下,它可能应该呈现整个 html 页面。对吗?
    • 不要取出信息,只需创建第二个视图和 URL,它会为您提供所需的信息 - 基本上是一个 HTTPResponse 对象,其中只有正文中的值。
    • 谢谢,我正在为此苦苦挣扎,不希望您编写整个代码。不管怎么说,还是要谢谢你。我会看看我能用它做什么。
    • 我已经充实了一些信息,其余的您可以从 Django 文档和 AJAX 请求的 Javascript 示例中收集。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-09
    • 2013-04-03
    • 2011-08-18
    • 1970-01-01
    • 1970-01-01
    • 2017-06-27
    相关资源
    最近更新 更多