我正在尝试实现我能想到的最简单的AJAX POST,因为我是AJAX和JQuery的新手。我的想法是:我有一个按钮,当它被点击时,我想将基本的POST数据提交到同一页面(页面是:http:// {{my ip address}} / django / ajax /)。
在我的.html文件中,我有:
<script type="text/javascript">
function pythonizer(){
$("#msgid").append("it SHOULD post after this is appended");
$.ajax({
url: '/django/ajax/',
type: 'POST',
data: {'obj': "test string"},
dataType: 'json',
contentType: "application/json; charset=utf-8",
success: function(response) {
alert(response);
}
});
}
</script>
<div id="msgid">
</div>
<input type="button" id="myButton" value="click me" onclick="pythonizer()" />
我在view.py中的相关功能是:
def ajax(request):
if request.method == 'POST':
return HttpResponse("Hello AJAX")
return render_to_response('huh.html', {})
简单,对吧?然而问题是,当我点击我的按钮时,“它应该在附加后发布”已成功添加到div中,但没有其他事情发生,HttpResponse(“Hello AJAX”)未返回,POST不是工作!
我写的内容似乎与我读过的文档一致,但我有一种感觉,我要么错过了一些愚蠢的东西,要么试图过分简化POST。提前谢谢!
答案 0 :(得分:1)
我不知道django或python,但你的javascript问题是当AJAX调用完成时它没有做任何事情。
<script type="text/javascript">
function pythonizer(){
$("#msgid").append("it SHOULD post after this is appended");
$.ajax({
url: '/django/ajax/',
type: 'POST',
data: {'obj':data}, // <-- possible error?
dataType: 'json',
contentType: "application/json; charset=utf-8",
success: function (response) {
alert(response);
}
});
}
</script>
这将提醒您写入响应的任何内容(可能是“Hello AJAX”)。
此外,您的脚本中存在错误:您尚未定义“数据”(如data: {'obj':data},
中所述)。除非您在其他地方声明data
,否则此脚本不会按原样执行。
答案 1 :(得分:0)
这里可能有错误吗?
success: function(response)
没有调试信息,我无法告诉你更多信息...... python是否收到请求?也许这是一个问题,它拒绝CSRF验证,你需要添加和导入它:
@csrf_exempt
def myview(request):
print 'hello'
也许你可以在这里阅读更多相关内容:https://docs.djangoproject.com/en/1.2/releases/1.2.5/#csrf-exception-for-ajax-requests
最初恕我直言,最好不要这么深?
那你为什么不使用另一个jQuery快捷方式?
$.post('/django/ajax/', data, function(data){
alert(data);
});
也许我误解了你的个人代码,但我想你只是在这里找到官方帮助:http://api.jquery.com/jQuery.post/
这有两件好事:
它们适合在python和jQuery方面进行调试...尝试学习使用它们...(如果你还没有,我很抱歉在这种情况下告诉你这么明显的事:) )
答案 2 :(得分:0)
我假设你想要一个JSON响应。
jquery document解释了可以使用的不同数据类型。当使用dataType:'json'
时,ajax方法期望响应上下文类型为JSON。
在模板html文件中试试这个:
<script type="text/javascript">
function pythonizer(){
var data = "data";
$("#msgid").append("it SHOULD post after this is appended");
$.ajax({
url: '/django/ajax/',
type: 'POST',
data: {obj:data},
dataType: 'json',
contentType: "application/json; charset=utf-8",
success: function (response) {
alert(response);
}
error:function(){
alert("failure");
}
});
}
</script>
在views.py中尝试此操作:
import json
from django.http import HttpResponse
def ajax(request):
if request.method == 'POST':
return HttpResponse({'message':'Hello Ajax'}, content_type = "application/json")