Django - 没有 JQuery 库的 Ajax

Posted

技术标签:

【中文标题】Django - 没有 JQuery 库的 Ajax【英文标题】:Django - Ajax without JQuery lib 【发布时间】: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'), 

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

【问题讨论】:

【参考方案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 示例中收集。

以上是关于Django - 没有 JQuery 库的 Ajax的主要内容,如果未能解决你的问题,请参考以下文章

使用 Ajax jQuery 提交 Django 表单的简单方法

Django模板内联jQuery不起作用

Cucumber (rails 2) 没有加载 jQuery

Pycharm没有显示来自django外部库的所有文件

jquery ajax 放在重复点击事件beforeSend方法

关于jQuery库的引用