2013-08-23 97 views
1

我無法通過jQuery-Ajax方法從表單中獲取ID爲city_name的輸入文本字段數據。我不斷收到的錯誤是"NetworkError: 403 FORBIDDEN - http://127.0.0.1:8000/dashboard"Django Ajax-Jquery無法獲取數據

我知道如何使用hidden字段類型獲取數據,但該選項無法在此處使用,此外,從hidden字段獲取數據現在已成爲過時的方法。那麼,如何使用Django-AjaxJquery方法獲取數據。

HTML

<form type = "POST"> 
      {% csrf_token %}  
      <input type="text" placeholder = "Enter City Name" id = "city_name"> 
      <input type="button" value = "On" id="on"> 
      <input type="button" value = "Off" id="off"> 
</form> 

JS文件

$(function(){ 

    $("#on").click(function (event) { 
     event.preventDefault(); 

     $.ajax({ 
      type: "POST", 
      url: "dashboard", 
      data : { 
       'city_name' : $("#city_name").val(), 
        }, 

       }); 
    }); 
}); 

View.py

@login_required 
def dashboard(request): 
    ctx = {} 

    if request.is_ajax(): 
     city_name = request.POST['city_name'] 
     print city_name 

    return render_to_response('dashboard/dashboard.html',ctx, context_instance = RequestContext(request)) 

urls.py

urlpatterns = patterns('', 
    url(r'^dashboard$','apps.dashboard.views.dashboard', name = 'llumpps_dashboard'), 

    ) 

回答

4

它缺少請求中的CSRF令牌。

您可以使用@csrf_exempt裝飾你的觀點一樣:

@login_required 
@csrf_exempt 
def dashboard(request): 
    ... 

或者隨着請求發送令牌:

$.ajax({ 
    type: "POST", 
    url: "dashboard", 
    data : { 
     'csrfmiddlewaretoken': $('input[name="csrfmiddlewaretoken"]').val(); 
     'city_name' : $("#city_name").val(), 
    }, 
    complete: function() { 
     // do whatever here 
    } 
}); 

瞭解更多關於CSRF和AJAX在Django這裏:https://docs.djangoproject.com/en/dev/ref/contrib/csrf/#ajax

希望它有幫助。

+0

是的......你是對的 – suhailvs