Django与ajax请求

2024-06-16 10:34:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我有下面的代码

function OpenModal()
{
 var fname="Quartz";
 var mname="Rohit";
 var lname="Patel";

 var url="{% url 'display_modal' %}"+fname +"/"+mname+"/"+lname;
 alert(url);
    xmlhttp = new XMLHttpRequest();
    xmlhttp.onreadystatechange = function() {
        if (this.readyState == 4 && this.status == 200) {
            document.getElementById('divcontent').innerHTML=this.responseText;
        }
    };
    xmlhttp.open("GET",url,true);
    xmlhttp.send();
}

如何在django模板语言中单击按钮执行上述代码。 url就像

path('member/search/',
         views.displayModalView, name="display_modal"),

Tags: 代码urlvardisplayfunctionthisfnamequartz
3条回答

ajax的作用是防止页面重新加载,这就是ajax的魔力所在。因此,如果您提供path,则可以将其用于页面重新加载

Html:

<script>
        function OpenModal(){
         var fname="Quartz";
         var mname="Rohit";
         var lname="Patel";
            $.ajax({
                type:'POST',
                url: "{% url 'display_modal' %}",
                data: { csrfmiddlewaretoken: '{{ csrf_token }}'},
                success: function(param123){
                    dict1 = JSON.parse(param123);
                    let data1 = dict1.test;
                    alert("Successful call do what ever you want");
                    alert(data1);
                },
                error: function(){
                    alert("sorry");
                }
            });
        }
</script>

URL.py: 它将把正则表达式与您提到的url相匹配。 您在ajax调用中提到的name='display_modal'参数和url: "{% url 'display_modal' %}"是相同的

    from django.conf.urls import url
    urlpatterns = [
        url(r'^display_modal', views.displayModalView, name='display_modal')
    ]

views.py:

import json
from django.http import HttpResponse
def displayModalView(request):
    #do what ever you want but at the end return Httpresponse with dictionary if you want 
     to use dictionary in your ajax call.
   param123 = {'test': "Hello_world"}
   return HttpResponse(json.dumps(param123))

您可以向按钮添加onclick,其值应等于您的函数 像这样

<button onclick='show()' something else ... ></button>

javascript

function show(){
        something else ...
}

您还可以看到jquerydocumentation

我认为可以在普通的click()方法中使用jQuery Ajax请求,如下所述:W3C Documentation

但是,在这种情况下,我认为您必须将url声明为TemplateAsView,这样您就可以告诉Django立即返回模板,而不是执行Django视图,如doc中所述。在模板中,您可以根据需要执行函数,例如在模板中,您可以在document ready上插入对函数的调用,并在加载DOM时执行,如here所述

要做到这一点,您必须更改url,因为在view.py中有一个用于搜索的view.someViewsomeView函数声明,但是您的函数是一个Javascript,所以我想,您应该将它放在模板代码中

我看到您的代码是一个Javascript函数,所以我试图解释为什么您必须使用Django模板系统调用这样的函数,作为模板调用,而不能直接调用该函数。我认为,按照您的意愿,每次都会强制重新加载DOM,并且,我认为,有几种方法可以在不刷新页面的情况下打开一个模式

相关问题 更多 >