【问题标题】:Django view is not rendering a template when using ajax使用 ajax 时,Django 视图不呈现模板
【发布时间】:2018-04-06 12:23:34
【问题描述】:

当我单击另一个模板中的按钮时,我试图在视图中呈现一个模板。我对视图中的方法进行了 ajax 调用,但我不确定它有什么问题。我无法渲染另一个模板,我做错了什么吗?

my view.py

@csrf_exempt
def checkLogin (request):
    if request.is_ajax():
        param = request.POST.get('param', None)
        param1 = request.POST.get('param1', None)
        if (param=="admin" and param1=="admin"):
            Datenow = datetime.datetime.now().strftime('%H:%M:%S')
            return render(request,'sample/test.html',{'Datenow': Datenow})
        else:
            Datenow = datetime.datetime.now().strftime('%H:%M:%S')
            return render(request,'sample/login.html',{'Datenow': Datenow})
    return HttpResponseBadRequest()

这是我模板中的 ajax 调用:

    loginbt.onclick = function() { 
            var uName = $('#username').val();
            var pWord = $('#password').val();
            $.ajax({type: 'POST',
            url: '/sample/checkLogin/',                            // some data url
            data: {param: uName, param1: pWord},       // some params  
            success: function (response) {                  // callback
                if (response.result === 'OK') {
                    if (response.data && typeof(response.data) === 'object') {
                       window.alert("its working");
                    }
                } else {
                    // handle an unsuccessful response
                }
            }
           });

}

当我单击模板中的按钮时,我得到了200 OK 结果,但模板并没有改变。任何建议都会有所帮助。

【问题讨论】:

  • 你的window.alert事件触发成功了吗?
  • 您的代码中没有任何内容会导致模板在任何地方显示?如果你想用模板响应更新 HTML,你需要在你的成功函数中这样做。
  • 你认为你的页面为什么会改变?您将 HTML 文档返回给 ajax 函数,而该函数除了显示警报之外什么都不做。使用 ajax,您的 django 视图应该返回一个 JSON 文档,以便您的 ajax 函数可以处理它并相应地更改 HTML DOM 树。
  • @souldeux,不,不是
  • @solarissmoke 是的,但是在 onsuccess 方法中没有触发 window.alert

标签: javascript jquery ajax django django-views


【解决方案1】:

需要修复ajax调用的js回调。

您正在从 django 返回一些 html,但在您的 js 回调中,您正在测试响应,因为它是 JSON 数据。

if (response.result === 'OK') {
   if (response.data && typeof(response.data) === 'object')

您正在检查这样的 JSON 结构:

{
   result: "OK",
   data: {
   }
}

请适当地修正您的代码。

【讨论】:

  • 我是新手,你能帮我看看到底是什么问题吗??
猜你喜欢
  • 2020-08-31
  • 2021-09-24
  • 1970-01-01
  • 2019-03-14
  • 2014-11-26
  • 1970-01-01
  • 1970-01-01
  • 2012-04-25
  • 1970-01-01
相关资源
最近更新 更多