Javascript Django-没有JQuery库的Ajax

Javascript Django-没有JQuery库的Ajax,javascript,ajax,django,django-templates,django-views,Javascript,Ajax,Django,Django Templates,Django Views,我正在学习和使用没有jQuery库的Ajax。我创建了一个简单的视图,在模板上呈现一个随机数。我添加了一个按钮并调用了ajax函数。但是,单击按钮不会更改屏幕上的值。我签入了DOM(firebug),它显示someText.responseText生成了整个html,而不仅仅是值,但是它在该html中有新的值。我分享这篇文章是为了提供更多关于我目前发现的信息。我对这一点还不熟悉,并且为我的前任做了很多实验;我已经检查了“request.is_ajax():”,但不知何故,视图在request中找

我正在学习和使用没有jQuery库的Ajax。我创建了一个简单的视图,在模板上呈现一个随机数。我添加了一个按钮并调用了ajax函数。但是,单击按钮不会更改屏幕上的值。我签入了DOM(firebug),它显示someText.responseText生成了整个html,而不仅仅是值,但是它在该html中有新的值。我分享这篇文章是为了提供更多关于我目前发现的信息。我对这一点还不熟悉,并且为我的前任做了很多实验;我已经检查了“request.is_ajax():”,但不知何故,视图在request中找不到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>

我从一个在线教程中学到了这一点。

这是因为您的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示例。
from django.http import JsonResponse

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