1

我无法city_name通过 jQuery-Ajax 方法从表单中获取带有 id 的输入文本字段数据。

我不断收到的错误是"NetworkError: 403 FORBIDDEN - http://127.0.0.1:8000/dashboard".

我知道如何使用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(),
                   },

               });
    });
});

视图.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))

网址.py

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

    )
4

1 回答 1

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
    }
});

在此处阅读有关 Django 中的 CSRF 和 AJAX 的更多信息:https ://docs.djangoproject.com/en/dev/ref/contrib/csrf/#ajax

希望能帮助到你。

于 2013-08-23T07:55:00.817 回答