【问题标题】:how to get json data in django sent using jquery如何在 django 中获取使用 jquery 发送的 json 数据
【发布时间】:2016-06-07 02:37:09
【问题描述】:

我正在使用 jquery 发送包含像这样的元素数组的 json 数据

$('#brand_category').click(function(event){

        category = $("input:checkbox[name=category]:checked").map(function() {
        return this.value;
        }).get();

        brand = $("input[type='radio']:checked").map(function() {
        return this.value;
        }).get();

        parameter.push({
          brand :   brand,
          category: category
        });

        var json = JSON.stringify(parameter)

        $.ajax({
            type: 'post',
            url: "{% url 'seller_details' %}",
            data: {'parameter[]' : json , csrfmiddlewaretoken:'{{csrf_token}}'},
            success: function(data){
            },
            error:function (response, error){
            }
            });

在视图中我正在收集这样的数据

brand_category = self.request.POST.get('parameter[]')
print brand_category

这样打印数据

[{"brand":["spykar"],"category":["Women Clothing","Dresses"]},{"brand":["Madame"],"category":["Women Clothing","Dresses"]}]

然后我尝试像这样循环遍历 json

for list in list_data:
                brand =  list_data['brand']
                print brand
                categories = list_data['category']
                print categories

但我收到了这样的错误

list indices must be integers, not str

如何循环json数据来获取品牌和类别列表?

【问题讨论】:

    标签: javascript jquery json django


    【解决方案1】:

    您的外部循环是一个列表,然后您遍历列表中的每个字典。此外,您必须将字符串转换为 python 对象。

    import json
    brand_category = self.request.POST.get('parameter[]')
    Lbrand_category = json.loads(brand_category)
    for D in Lbrand_category:
       brand,categories = D['brand'],D['category']
    

    注意:如果您只想要品牌字符串,不想要列表,请使用:

    brand,categories = D['brand'][0],D['category']
    

    【讨论】:

    • 在第一个它抛出字符串'indices must be integers'
    【解决方案2】:

    我向你推荐这个 AJAX 请求(更清晰):

    $('#brand_category').click( sendAjax );
    
    function sendAjax()
    {
      var category = $("input:checkbox[name='category']:checked").val();
      var brand = $("input[type='radio']:checked").val();
    
      var data = { "category" : category, "brand" : brand, "csrfmiddlewaretoken" : '{{csrf_token}}' }
    
      $.ajax({
        type: 'post',
        url: "{% url 'seller_details' %}",
        data: data,
        success: function(data)
        {
          //console.log(data) // Print the response of Django or see this in "Network" request, F12 Chrome
        },
        error:function (response, error)
        {
        }
      });
    }
    

    查看:

    category = request.POST['category']
    print category
    
    brand    = request.POST['brand']
    print brand
    

    在 JavaScript 中列出品牌数据:

    var data = {} //This is a empty object named data
    data.brans = [];
    

    然后您需要为选择所有品牌创建一个

    for ("list of brands"){
      brand_name = logic
      data.brands.push(brand_name)
    } //This is only a idea
    

    【讨论】:

    • 我如何知道哪个品牌属于哪个类别?
    • 我想做什么,用户可以选择多个品牌,每个品牌可以有多个类别
    • 好吧,你错过了问题中的一些内容。如果 print brand_category 给你一个列表,那么上一个代码应该可以工作,如果它是一个字符串,那么这个。都测试过
    • 我想问一个问题...在这种情况下这是发送数据的正确方法吗?
    • 嗯这个品类有很多品牌吗?看到这个link
    猜你喜欢
    • 1970-01-01
    • 2015-08-17
    • 2021-09-26
    • 2011-04-07
    • 1970-01-01
    • 2019-06-27
    • 2011-09-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多