2013-02-19 99 views
0
$.ajax({ 
    type :'GET', 

    url : geturl(a), 
    // type: $(this).attr('method'), 
    dataType : 'json', 

views.py:爲什麼我的Django request.method不匹配POST

if request.method=="POST": 


     if request.POST.get('monyrsubmit'): 

      monthform=MonthForm(request.POST) 
      if monthform.is_valid(): 
       selected_month=monthform.cleaned_data["Month"] 
       selected_year=monthform.cleaned_data["Year"] 
       print selected_month 
       print selected_year 

我可以有GET和在阿賈克斯的類型字段POST請求。即時通訊使用表格,只有當提交按鈕被點擊時,我試圖根據提交的數據顯示信息。如果request.POST.get('monyrsubmit')不起作用。 幫助將不勝感激

+1

想必你已經使用'型嘗試過嗎?您在Firebug或Chrome Inspector網絡面板中看到什麼?我最好的猜測是你正在碰到Django的CSRF保護。 – 2013-02-19 09:59:00

回答

0

這很簡單。你必須抽象事件。

function event_page_load() { 
    function ajax_request('GET') 
} 

function click_submit_button() { 
    function ajax_request('POST') 
} 

function ajax_request(type) { 

$.ajax({ 
    type : type, 
    ...... 
    ...... 
}) 
} 

您也可以考慮follwoign一般指導原則。 GET和POST應根據請求的類型jQuery中使用服務器

- If you are reading the existing data(without modification) from the server, use GET 
- if you are writing/modifying any data in the server, use POST 

,您可以使用這些簡單的方法。

GET請求

$.get( 
    url, 
    {param1: "value1", param2: "value2"}, 
    function(responseText){ 
     // todo ; 
    }, 
    "html" 
); 

POST請求

$.post( 
    url, 
    {param1: "value1", param2: "value2"}, 
    function(responseText){ 
     // todo ; 
    }, 
    "html" 
); 

請確保您有禁用瀏覽器的緩存。

$.ajaxSetup ({ 
     cache: false 
    }); 

在Django端,您可以使用request.is_ajax()方法來驗證Ajax調用,您可以篩選基於request.method財產。 「POST'`在AJAX部分:

您可以參考AJAX的所有可能的用途與Djano在https://github.com/sivaa/django-jquery-ajax-exmaples