当数据变量返回“OK”或“EXISTS”时,它不返回任何内容。
我有一个带叠加效果的模板。 income.html模板有一个表单和一个“添加新类别”按钮,当您单击它时,将显示一个带有小窗体的新窗口(叠加效果)。
income.html:
(document).ready(function(){
$("#new_cat").live("click", ( function() {
var cat_name = $("#nc").val();
if (cat_name) {
$.get("/cashflow/new_cat/0/", { name: cat_name, account: "{{ account }}" },
function(data){
if (data == "OK") {
$("#id_category").val(cat_name);
}
if (data == "EXISTS") {
var error = "The category already exists";
alert(error);
}
});
}
else {
var error = "Please enter a name";
alert(error);
}
}))
});
</script>
...
<form>{% csrf_token %}
<label for="name">Name:</label><input type="text" id="nc" />
<input type="submit" value="Submit" id="new_cat" />
</form>
views.py:
@login_required
def income(request, account_name):
account = account_name
if request.method == 'POST':
form = TransForm(user=request.user, data=request.POST)
if form.is_valid():
income = form.save(commit=False)
income.type = 0
income.account = Account.objects.get(
name = account_name,
user = request.user)
income.name = form.cleaned_data['name']
income.category = form.cleaned_data['category']
income.save()
uri = ("/cashflow/account/%s") % str(account_name)
return HttpResponseRedirect(uri)
else:
form = TransForm(user=request.user)
context = {
'TransForm': form,
'type': '0',
'account': account,
}
return render_to_response(
'cashflow/income.html',
context,
context_instance = RequestContext(request),
)
def new_cat(request, type):
if request.method == u'GET':
GET = request.GET
if GET.has_key(u'name'):
name = request.GET[u'name']
account = request.GET[u'account']
c = Category.objects.filter(name=name, account=account)
if c:
s = "EXISTS"
else:
c = Category(name = name, user = request.user,
type = type, account = account)
c.save()
s = "OK"
return HttpResponse(s)
编辑:调试信息
> ../cashflow/views.py(765)new_cat()-><django....xa507b0c>
-> return HttpResponse(message)
(Pdb) p message
'EXISTS'
(Pdb) n
> ../site-packages/django/core/handlers/base.py(112)get_response()
-> if response is None:
p response.content
'EXISTS'
(Pdb) p response.status_code
200
奇怪的是,当我想调试时,叠加显示在调试时,而不是在调试之后。这就是为什么我认为这是一个JS错误。我忘了告诉该类别已创建并正确保存到数据库。
答案 0 :(得分:0)
答案 1 :(得分:0)
你检查过javascript错误了吗?
在我看来,{{ account }}
在视图中是account_name
,如果名称意味着任何东西,那么它很可能是一个字符串。
在你的ajax模板中,你直接提供{{ account }}
没有引号,所以它应该抛出一个未定义的javascript错误。
另外,在这种情况下,我总是会在你的ajax调用中调试一下。抛出一个pdb.set_trace(),看看发送请求时代码在做什么。它在哪里死?
您可以在检查GET
时查看代码,查找密钥account
,是否始终定义变量s
。