Jquery Django框架中的Ajax帖子?
我在django框架中对一篇ajax/jquery文章进行了一个简单的测试,但我真的不明白为什么输出不能成为一个模板页面。有人吗 我可以在firebug的“响应”选项卡中看到帖子的内容,但无论我尝试返回模板还是简单消息,浏览器本身都不会发生任何事情。相反,非ajax帖子按预期工作(加载新页面,发布消息) 我是ajax/jquery/django的新手,请原谅我的无知:) 最后,我希望能够通过jquery将任意的非表单变量传递给django视图。可能的谢谢:) 这是密码-- test.html:Jquery Django框架中的Ajax帖子?,jquery,ajax,django,Jquery,Ajax,Django,我在django框架中对一篇ajax/jquery文章进行了一个简单的测试,但我真的不明白为什么输出不能成为一个模板页面。有人吗 我可以在firebug的“响应”选项卡中看到帖子的内容,但无论我尝试返回模板还是简单消息,浏览器本身都不会发生任何事情。相反,非ajax帖子按预期工作(加载新页面,发布消息) 我是ajax/jquery/django的新手,请原谅我的无知:) 最后,我希望能够通过jquery将任意的非表单变量传递给django视图。可能的谢谢:) 这是密码-- test.html:
<html>
<head>
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.5.1/jquery.min.js"></script></javascript>
<script type="text/javascript">
$(document).ready(function() {
$("#testForm").submit(function(event){
event.preventDefault();
$.ajax({
type:"POST",
url:"/test_results/"
});
});
return false;
});
</script>
</head>
<body>
<form id="testForm" action="/test_results/" method="post">
<input type="submit" id="go" name="go" value="Go!">
</form>
</body>
</html>
URL.py:
(r'^test_results/$', views.test_ajax),
(r'^test/$', views.test),
以及几乎为空的test_results.html:
<html>
<head>
</head>
<body>
test results
</body>
</html>
测试结果
我可以在网上看到这篇文章的内容
firebug的“响应”选项卡,但是否
我尝试返回一个模板或一个简单的
消息中没有任何事件发生
浏览器本身。相反,非ajax
按预期进行后期工作(新加载)
页面,发布消息)
如果你得到了回应,你就得到了回应。你只是没有用它做任何事
为什么不提醒数据并将其附加到
中,例如:
$.ajax({
type:"POST",
url:"/test_results/",
data: {
'arbitrary-data': 'this is arbitrary data',
'some-form-field': $("myform input:first").val(), // from form
'background-color': $("body").css("background-color")
// all of this data is submitted via POST to your view.
// in django, request.POST['background-color']
},
success: function(data){
alert(data);
$("body").append(data);
}
});
您需要为视图返回的响应添加处理程序:
$.ajax({
type:"POST",
url:"/test_results/",
dataType: "json",
success: function(json)
{
//specifying a dataType of json makes jQuery pre-eval the response for us
console.log(json.message);
}
});
您可能还希望在视图中将响应编码为JavaScript:
try:
import json
except ImportError:
import simplejson
def my_view(request):
if request.is_ajax():
return HttpResponse(json.dumps({'message' : 'awesome'},
ensure_ascii=False), mimetype='application/javascript')
希望这能帮到你 谢谢,Brandon——你已经回答了我的下一个问题——lol——json是如何融入其中的——但我仍然感到困惑:你代码中的“很棒”显示在控制台中,而不是浏览器中。这是你想要的吗?我试图弄清楚往返可能是什么样子的——让ajax发布到django视图,该视图显示最初由ajax发布的变量。很高兴我能提供帮助。如何处理返回的值取决于您的应用程序。例如,假设您希望将返回的值附加到DOM的末尾。在jQuery中可以执行:$('body').append(json.message);你的例子很好用。我想我只是想把结果显示在一个新的页面上。我理解这在某种程度上违背了ajax的目的,但正如我在回应Brandon的建议时提到的——我试图理解“数据”如何从ajax传输到django视图和新模板。如果你想要一个新页面,不要使用ajax。正常提交表单,生成的HTML将作为响应。如果您不想要一个新页面,请使用ajax并修改当前页面(如我的示例所示),或者根本不修改!您可以在brandons示例中看到,他记录了响应
console.log()
。你用它做什么取决于你。我明白,我只是想了解事物是如何“旅行”的;)我可以将不属于提交表单一部分的变量存储在ajax帖子中吗?比如说,我想将模板背景颜色的值发送到django视图进行处理?当然,ajax函数是纯javascript的。除了在
表单提交事件中触发HTML之外,不涉及任何HTML。例如,你可以在计时器上调用它!您发送的数据也是任意的。查看$.ajax文档:通过data
参数发送数据。我会用一个例子更新我的帖子。太棒了!你太快了,玉姬。哈哈。我相信你是在睡觉的时候做的,但你刚刚让我开心了:)再次感谢。注意你的返回false
的级别不对;它应该在$(“#testForm”)内。提交块,即再高一行,这样它就在结束}之前代码>用于该块。
try:
import json
except ImportError:
import simplejson
def my_view(request):
if request.is_ajax():
return HttpResponse(json.dumps({'message' : 'awesome'},
ensure_ascii=False), mimetype='application/javascript')