Django抛出错误没有。 10053从jQuery接收POST时

时间:2012-01-13 13:37:27

标签: jquery ajax django http

我正在尝试使用jQuery向Django发送POST和GET请求。

到目前为止只有GET被识别,POST我会收到错误,虽然GET工作但我无法获得我发送到我的Django应用程序的各个字段。

所以我想知道问题是什么,我如何让POST工作?

views.py

def xhr_test(request):
    if request.is_ajax():
        if request.method == 'GET':
            message = "Hello GET Ajax"
            print request.GET
            print "hello"
        elif request.method == 'POST':
            message = "Hello POST Ajax"
            print request.POST
    else:
        message = "Hello"
    return HttpResponse(message)

模板

<html>  
<head>  
  <title>Ajax with jQuery Example</title>  
  <script type="text/JavaScript" src="{{ MEDIA_URL }}js/jquery.js"></script>  
  <script type="text/JavaScript">  
  $(document).ready(function() {
    $("#generate").click(function() {
      $.get("/ajax_fetch/xhr_test", function(data) {
      // alert(data);
      });
    });

    $("#generate_post").click(function() {
      $.post("/ajax_fetch/xhr_test", {
        name: "Monty"
      }, function(data) {
          alert(data)
      });
    });
  });
  </script>  
<style type="text/css">  
    #wrapper {  
      width: 240px;  
      height: 80px;  
      margin: auto;  
      padding: 10px;  
      margin-top: 10px;  
      border: 1px solid black;  
      text-align: center;  
    }  
  </style>  
</head>  
<body>  
  <div id="wrapper">  
    <div id="quote"><p> </p></div> 
    <form method="get">
      <p><input type="text" name="user" /></p>
      <p><input type="submit" id="generate" value="Generate!" /></p>
    </form>

    <form method="post">{% csrf_token %}
      <p><input type="text" name="user" /></p>
      <p><input id="generate_post" type="submit" value="Click" /></p>
    </form>
  </div
</body>  
</html> 

错误跟踪

Exception happened during processing of request from ('127.0.0.1', 1625)
Traceback (most recent call last):

  File "c:\python27\lib\SocketServer.py", line 284, in _handle_request_noblock
    self.process_request(request, client_address)
  File "c:\python27\lib\SocketServer.py", line 310, in process_request
    self.finish_request(request, client_address)
  File "c:\python27\lib\SocketServer.py", line 323, in finish_request
    self.RequestHandlerClass(request, client_address, self)
  File "c:\python27\lib\site-packages\django\core\servers\basehttp.py", line 56
, in __init__
    BaseHTTPRequestHandler.__init__(self, *args, **kwargs)
  File "c:\python27\lib\SocketServer.py", line 641, in __init__
    self.finish()
  File "c:\python27\lib\SocketServer.py", line 694, in finish
    self.wfile.flush()
  File "c:\python27\lib\socket.py", line 301, in flush
    self._sock.sendall(view[write_offset:write_offset+buffer_size])
error: [Errno 10053] An established connection was aborted by the software in y
ur host machine

3 个答案:

答案 0 :(得分:2)

更改

//your css would be like this
#divToDisplay {
    display:none;
}

$('document').ready(function() {

    $('#divToDisplay').show();
});

//or to make it show hide on click use toggle()
$('document').ready(function() {

     $('#divToDisplay').toggle();
});

//you can also use slideToggle() to give some animation for show and hide
$('document').ready(function() { 

    $('#divToDisplay').slideToggle( "slow" );
}

<input id="generate_post" type="submit" value="Click" />

(将<input id="generate_post" type="button" value="Click" /> 更改为submit

答案 1 :(得分:0)

有一个非常相似的question

答案可能在settings.APPEND_SLASH设置中,将/ajax_fetch/xhr_test重定向到/ajax_fetch/xhr_test/。尝试使用末尾的斜杠将数据发布到URL

答案 2 :(得分:0)

好的,我不想调整问题。所以请将我的问题解决方案作为答案发布。这是修改过的文件

<强>模板

  $(document).ready(function() {
    $("#generate").click(function() {
      $.get("/ajax_fetch/xhr_test",$("form:first").serialize(), function(data) {
          alert(data);
      });
      return false
    });
  });

<form>{% csrf_token %}
      <p><input type="text" name="user" /></p>
      <p><input type="text" name="name" /></p>
      <p><input type="submit" id="generate" value="Generate!" /></p>
</form>

<强> views.py

def xhr_test(request):
    if request.is_ajax():
        if request.method == 'GET':
            message = "Hello GET Ajax"
            message += " "+request.GET.get('user', '')
            message += " "+request.GET.get('name', '')
        elif request.method == 'POST':
            message = "Hello POST Ajax"
            print "hello"
            message += " "+request.POST.get('user', '')
    else:
        message = "Hello"
    return HttpResponse(message)