【问题标题】:Unable to get POST or GET form data while using AJAX使用 AJAX 时无法获取 POST 或 GET 表单数据
【发布时间】:2019-06-10 12:38:25
【问题描述】:

一直在尝试使用 django-filters 过滤数据。当我从模板发送单独的 POST 或 GET 请求时,代码正在工作。我想避免为过滤信息表而进行的额外重新加载。

这是视图:

def search(request):

    dynamic_filter = [f.name for f in Controlpanel._meta.get_fields()]

    class UserFilter(django_filters.FilterSet):
        class Meta:
            model = Controlpanel
            fields = dynamic_filter

    user_list = Controlpanel.objects.all()
    user_filter = UserFilter(request.GET.get("filters[]"), 
    queryset=user_list)
    chart = list(user_filter.qs.values())

    return JsonResponse(chart, safe=False)

这是调用上述视图的 AJAX 代码:

$('#filter-data').on('submit', function (event) {
    event.preventDefault();
    var dynamic = $('#filter-data').serialize();
    console.log($('#filter-data').serializeArray())
    $.ajax({
      url: '/search/',
      type: 'GET',
      data: {
        filters : dynamic
      },
      dataType: 'json',
   success : function(json) {
        console.log(json); // log the returned json to the console
        console.log("success"); // another sanity check
    },

    // handle a non-successful response
    error : function(xhr,errmsg,err) {
        console.log(xhr.status + ": " + xhr.responseText); // provide a bit more info about the error to the console
    }
    });

即使我添加 CSRF 令牌并将其设为 POST 请求,request.GET(或 POST)当前仍为空。

我遇到了一些关于 SO 的问题,指出使用 request.body 可以解决问题,但即使这样也失败了。

【问题讨论】:

    标签: django django-filter


    【解决方案1】:

    问题在于 POST 请求是作为字符串传递的。

    这解决了问题:

    user_filters = request.POST.get('filters', '')
    user_filters = user_filters.split("&")
    
    user_filters = {item.split("=")[0]: item.split("=")[1].replace("%20", " ")
                    for item in user_filters}
    
    user_filters.pop('csrfmiddlewaretoken')
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-10
      相关资源
      最近更新 更多