如何访问jQuery.ajax()在Django视图中获取参数
问题描述:
我最近开始学习jQuery,现在我正在玩弄.ajax()函数。如何访问jQuery.ajax()在Django视图中获取参数
我不知道如何访问Django中的get参数。
我的代码如下所示:
jQuery的& HTML:
<div id="browser">
<ul>
{% comment %}
Theres a script for each ctg. Each script fades out #astream, fades in #stream_loading and then it should display #astream with new values based on the GET param in ajax call
Prolly it wont work, but first I need to interact with the GET param in my views.py
{% endcomment %}
{% for ctg in ctgs %}
<script type="text/javascript" charset="utf-8">
(function($) {
$(document).ready(function() {
$("#stream_loading").hide()
$("#browse_{{ctg}}").click(function() {
$("#astream").fadeOut()
$("#stream_loading").fadeIn()
$.ajax({
type: "GET",
url: "/{{defo}}/?param={{ctg}}",
success: function() {
$("#stream_loading").fadeOut()
$("#astream").fadeIn()
}
});
});
});
})(jQuery);
</script>
<li><a id="browse_{{ctg}}" title="{{ctg}}">{{ctg}}</a></li>
{% endfor %}
</ul>
</div>
<div id="astream">
{{ajaxGet}} #just to see whats rendered
{% include "astream.html" %}
</div>
<div id="stream_loading">
loading stream, please wait ...
</div>
Django的:
@https_off
def index(request, template='index.html'):
request.session.set_test_cookie()
path=request.META.get('PATH_INFO')
defo=path[1:path[1:].find('/')+1]
request.session['defo']=defo
defo=request.session['defo']
# build the stream sorted by -pub_date
import itertools
chained=itertools.chain(
model1.objects.order_by('-pub_date').filter(),
model2.objects.order_by('-pub_date').filter(),
)
stream=sorted(chained, key=lambda x: x.pub_date, reverse=True)
ajaxGet=request.GET.get('param','dummy')
if request.is_ajax():
template='astream.html'
ajaxGet=request.GET.get('param',False)
renderParams={'defo':defo, 'stream':stream, 'ajaxGet':ajaxGet}
return render_to_response(template, renderParams, context_instance=RequestContext(request))
然后我试图说明它在我的模板
{{ ajaxGet }}
乙ut每次渲染为'虚拟'
在firebug中,我可以看到具有正确的键和值的获取请求。
我在这里错过了什么?
感谢
答
有一种常见的疑难杂症,人们常常会做这种阿贾克斯的时候进入,并没有阻止链接/按钮的默认操作。所以你的Ajax函数从来没有机会触发,并且你在Django代码中看到的请求是由正常的页面加载引起的 - 这就是为什么is_ajax()
是错误的原因。
给click
处理函数一个参数event
,并在函数结束时调用event.preventDefault();
。
+0
它在Opera中起作用!但它只呈现astream.html模板,而且我放入成功函数的任何内容都不会执行(我尝试了一些简单的提示('xyz')) – marlboro 2012-04-30 22:28:58
请张贴您的整个视图代码,以便社区可以更好地帮助您。 – Brandon 2012-04-27 14:30:28
应该清楚的是,代码没有进入'if request.is_ajax()'块,否则'ajaxGet'将会是'False'而不是该字符串。所以你需要弄清楚为什么。 – 2012-04-27 14:34:22
是的,先生!但是,对于我作为这个问题的初学者来说,这是非常令人困惑的,为什么它没有进入is_ajax,当从我的pov这是一个Ajax请求。我更新了一些评论的描述 – marlboro 2012-04-27 15:12:35