我正在尝试使用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
答案 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)