1

我试图让一个基本的应用程序在包含 AJAX 的 Django 中工作。该应用程序将获取一个域名,然后将其发送到服务器,服务器将对其进行 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 我不应该在每个部分添加什么代码。

任何帮助将非常感激...............

4

1 回答 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>
于 2013-03-10T23:20:04.803 回答