【问题标题】:Using AJAX to execute Python Django Script使用 AJAX 执行 Python Django 脚本
【发布时间】:2014-03-07 17:07:36
【问题描述】:

我正在为我的网站使用 Django。目前我正在使用location.reload();,这样当用户填写数据并单击一个按钮时,它会触发location.reload(),而当整个页面重新加载时,它将执行 Django 脚本。但我不想重新加载整个页面来执行脚本,我只想使用 ajax 重新加载特定的<div>。我该怎么做?

{% if userFirstName %}
                <div id="topAdminCont" class="left">
                    <div id="userSection">
                <!--        <img src="{% static "assets/images/admin_icon.png" %}" width="20" alt="Admin" class="left" /> -->
                        <p id="admin" class="right">{{userFirstName}}</p>
                        <div class="clear"></div>
                    </div>
                    <ul id="dropAdmin">
                        <li><a href="#" id="chngPwdBut">Change Password</a></li>
                        <li><a href="/authentication/logout">Logout</a></li>
                    </ul>
                </div>
            {% else %} 

                <div id="popCont" class="left username_view">
                    <p id="signIn"><a href="#">Signin</a></p>
                    <p>/</p>
                    <p id="signUp"><a href="#">Signup</a></p>
                    <div class="clear"></div>
                </div>
            {% endif %}

上述 HTML 的 Jquery AJAX 处理程序:

function authenticateUser(email, password)
            {

            $.ajax({
                url:    '/authentication/login/',
                type:   'POST',
                    cache: 'false',
                    async: 'true',
                data: {

                        signinEmail:email,signinPwd:password, 

                        },
                dataType: "json",   
                    success:function(response){
                                            statusCode = response.statusCode;
                            if (statusCode == 200)
                            {
                                location.reload();


                            }

                        }
                }); 
            }

【问题讨论】:

  • location.reload 会很好地重新加载位置,而不仅仅是页面上的一些内容。你想刷新哪个&lt;div&gt;
  • 不。我只是想一次又一次地重新加载上面的 HTML 部分。我们可以使用 AJAX 来做到这一点吗?
  • 此代码 sn-p 的父 &lt;div&gt; id 是什么?
  • 请检查上面我已经添加了AJAX Jquery Handler

标签: jquery python ajax django


【解决方案1】:

首先将&lt;div id="topAdminCont" class="left"&gt;...&lt;/div&gt; 复制到它自己的文件中。比方说,

top_admin.html

{% if userFirstName %}
<div id="topAdminCont" class="left">
    <div id="userSection">
    <!-- <img src="{% static "assets/images/admin_icon.png" %}" width="20" alt="Admin" class="left" /> -->
        <p id="admin" class="right">{{userFirstName}}</p>
        <div class="clear"></div>
    </div>
    <ul id="dropAdmin">
        <li><a href="#" id="chngPwdBut">Change Password</a></li>
        <li><a href="/authentication/logout">Logout</a></li>
    </ul>
</div>
{% else %}
<div id="popCont" class="left username_view">
    <p id="signIn"><a href="#">Signin</a></p>
    <p>/</p>
    <p id="signUp"><a href="#">Signup</a></p>
    <div class="clear"></div>
</div>
{% endif %}

然后在你的当前页面中,

current.html

<div id="ajaxSection">
    {% include 'top_admin.html' %}
</div>

现在为top_admin.html创建一个新的视图和url规则

urls.py

url(r'^top_admin/$', 'top_admin', name='top_admin'),

views.py

def top_admin(request):
    // your stuff here

    return render(request, 'top_admin.html', {
        // call admin object variables here
    })

最后是你的 ajax 请求,

$.ajax({
    ...
    success: function(response) {
        if (response.statusCode == 200) {
            $('#topAdminCont').load('/app_name/top_admin/');
        }
    },
    ...

显然,您必须更改许多细节(名称、网址等)以匹配您的应用程序,但是,此方法将允许您在 页面上重新加载内容,而无需重新加载整个页面。

【讨论】:

  • .load() 对 .ajax() 不是多余的吗?请参阅下面的@warunsl 答案。
【解决方案2】:

将 AJAX 调用的成功部分修改为:

success:function(response){ 
    statusCode = response.statusCode;
    if (statusCode == 200)
    {
        $('#ajaxSection').html(response); #assuming that the response is a HTML
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-23
    • 2016-09-30
    • 2012-08-14
    • 2017-06-25
    • 2011-03-09
    • 2013-11-02
    • 1970-01-01
    • 2014-10-19
    相关资源
    最近更新 更多