2010-12-22 66 views
1

當它返回「OK」或「EXISTS」時,數據變量將不返回任何內容。來自Ajax調用的空數據

我有一個覆蓋效果的模板。 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

你檢查的JavaScript錯誤?

它在我看來像{{ account }}account_name在視圖中,如果名稱意味着什麼,它最有可能是一個字符串。

在您的ajax模板中,您直接提供{{ account }}而沒有引號,所以它應該爲undefined引發一個javascript錯誤。

另外,在這種情況下,我總是會在ajax調用中多調試一下。拋出pdb.set_trace()並查看發送請求時代碼的作用。它在哪裏死亡?

您可以從字面上瀏覽代碼,因爲它會檢查GET,查找密鑰account,是否曾經將其定義爲定義變量s

+0

我修正了錯誤,並忘記在帖子中修改它。你是對的,它是拋出一個JavaScript錯誤。我調試了從ajax函數調用的視圖,並且所有視圖都執行正常。 – mxm 2010-12-23 16:03:07