javascript - Ajax xhr onload 未在 django 应用程序中调用

标签 javascript django ajax xmlhttprequest

我有一个包含用户帖子的 Django 应用程序。我正在尝试添加“喜欢”/投票系统。我是通过重定向完成页面刷新来完成此操作的,其中进行了投票,然后重定向回带有新投票/类似总更新的同一页面。然后我正在阅读有关 ajax 以及如何在不完全重新加载的情况下更新页面的一部分的内容。

let up_vote = document.getElementById("up-vote").addEventListener('click', () => {
    console.log("clicked");
    let xhr = new XMLHttpRequest();
    xhr.open('GET', "{% url 'up-vote' %}", true);
    console.log(xhr);
    xhr.onload = () => {
        console.log("inside");

    };
    console.log("outside");
});

到目前为止,我的 js 看起来像这样。当我单击“up-vote”时,“clicked”会与 xhr 对象一起打印。然而,onload 似乎永远不会被调用,因为“inside”永远不会被打印,而是直接传递到“outside”。

我感觉问题与 URL 路径有关,但我不知道如何正确获取路径。 该应用程序的基本文件结构是:

app
|-static/app  
    |-scripts/*this js file*/  
    |-images  
    |-styles  
|-templates/app  
    |-html files
|-views.py *where the request is being made*
|-urls.py

urls.py 包含,

urlpatterns = [
    ...
    path('post/<int:pk>/up/', up_vote, name='up-vote'),
    ...
]

和views.py包含,

@login_required()
def up_vote(request, pk):
    print("HI")
    obj = get_object_or_404(Post, pk=pk)
    uid = request.user.id
    if not obj.votes.exists(uid):
        obj.votes.up(uid)
    data = {
        'votes': obj.votes.count()
    }
    return JsonResponse(data)

非常感谢任何帮助或建议:)

附:我还尝试过 xhr.onreadystate,这就是 URL 路径错误的原因。

最佳答案

AJAX 请求(正如您可能从其名称中猜到的那样)是异步的,因此它实际上会直接传递到“外部”。

除此之外,您还必须调用xhr.send()

let up_vote = document.getElementById("up-vote").addEventListener('click', () => {
    console.log("clicked");
    let xhr = new XMLHttpRequest();
    xhr.open('GET', "{% url 'up-vote' %}", true);
    console.log(xhr);
    xhr.onload = () => {
        console.log("inside");
    };
    xhr.send()
    console.log("outside");
});

PS:我认为您的网址/ View 有问题。您的 View 和路由需要 pk,但您的 {% url 'up-vote' %} 未向其传递 pk

关于javascript - Ajax xhr onload 未在 django 应用程序中调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60960084/

相关文章:

javascript - 突出显示事件选项卡的导航

django - Django 表单模型中的日期时间字段

python - 选择基于数据库值 Django 检查哪个单选按钮

javascript - 您可以在同一个提交上运行的一个函数中有两个 ajax 调用吗?

javascript - 在共享主机中使用 websockets 是否有任何替代方案

javascript - Flowplayer 使用 OVA 禁用自动播放

javascript - 使用坐标以编程方式旋转形状

javascript - 使用支持 Javascript 的 WCF 进行错误处理?

Django 模型 : are there reasons to make searched field with db_index?

ruby-on-rails - Rails 设计多态 - 使用 Ajax 获取部分渲染