Django与Ajax

1 投票
1 回答
1311 浏览
提问于 2025-04-17 18:37

我正在尝试在Django中创建一个基本的应用程序,里面使用AJAX。这个应用会接收一个域名,然后把它发送到服务器,服务器会对这个域名进行DNS查询,最后通过AJAX把结果返回给客户端。

视图

from django.http import *
from django.shortcuts import render_to_response
from django.template import RequestContext

import sys
import os
import socket

def main(request):
    if request.method == 'POST':
       dig_input = request.POST['digInput']
       digoutput = socket.gethostbyname(dig_input)
       return render_to_response('digajax.html', {'response': digoutput}, context_instance=RequestContext(request))
    else:
       return render_to_response('digajax.html', context_instance=RequestContext(request))

网址

url(r'^digajax$', 'digajax.views.main'),

模板

<!DOCTYPE html>
<html lang="en">
 <head>
    <meta charset="utf-8">
    <script type='text/javascript' src='http://code.jquery.com/jquery-1.8.2.js'></script>

<script type="text/javascript">
function send_request(){
  $.get(location.href, function(data){
    $("#output").html(data.output);
  });
}

 </head>
  <body>
        <form method="post" name="diginput form" action="/digajax">
          {% csrf_token %}
                                <input name="digInput" id="digInput" type="text">
                                <input type="button" onclick="send_request();" value="Request this page with AJAX">lookup</input>
                </form>
{% if response %}
  <div id="output">
    <p>{{ response|linebreaksbr }}</p>
  </div>
{% else %}
  <p>no</p>
{% endif %}

  </body}
</html>

在没有AJAX的情况下,一切都能正常工作。现在我想使用AJAX,但我不太清楚每个部分应该添加什么代码。

任何帮助都会非常感谢...............

1 个回答

1
  1. Django 提供了一个方法,可以在你视图中的 request 对象上使用,这个方法可以告诉你请求是否是通过 XmlHttp 发出的,方法名是 request.is_ajax()
  2. 如果这个方法返回的是 true,那你可能只想返回你想更新的页面的一小部分,而不是整个页面。
  3. 如果这个方法返回的是 false,那你可能想返回整个页面,因为用户可能关闭了 JavaScript,或者发生了某种错误,导致视图被正常请求。

所以,你的视图应该像这样:

def main(request):
    if request.method == 'POST':
       dig_input = request.POST['digInput']
       digoutput = socket.gethostbyname(dig_input)
       if request.is_ajax():
            return HttpResponse("<p>%s</p>" % digoutput)
       else:
            return render(request, 'digajax.html', {
                'response': digoutput
            })
    else:
       return render(request, 'digajax.html')

你的 JavaScript 代码应该像这样:

<script type="text/javascript">
function send_request(){
  $.get(location.href, function(data){
    $("#output").html(data);
  });
}
</script>

撰写回答