如何访问ajax调用中发送的数据视图.pyPythondjang

2024-10-06 07:36:21 发布

您现在位置:Python中文网/ 问答频道 /正文

下面是我在html中用来发送用户id(数字)数组的代码。单击我要发送阵列的复选框(checkID):-

var checkIds = []
           $(document).on("click","#group_save",function(){
               $("#candidate-data tr").each(function(index,rowhtml){
                  var checked= $('input[id="groups"]:checked',rowhtml).length;
                  checkIds = jQuery.unique(checkIds)
                  if (checked==1){
                    checkIds.push($('.hideMe',rowhtml).text());
                  }
                });
               alert(checkIds);
               var jsonText = JSON.stringify(checkIds)
               checkIds.length = 0;
               var groupName = $('input:text[name="group_name"]').val();
               alert(groupName)
               $.ajax({
                    url: "{% url 'userinfo:groups' %}" + "?gname="+groupName,
                    type: "POST",
                    data:jsonText,
                    dataType: 'json',
                    success: function(){
                        notyfy({type: "success", layout: "topCenter", text: "Saved", timeout: 5000});
                    }
               });
           });

如何访问视图中的data:jsonText。py我这样做是行不通的,我必须把gname(name)和数组(jsonText)id一起保存在两个表中GroupMembers在Groups表中,我必须保存group name(gname),保存后我必须获得保存的group对象的id和userid数组(jsonText)一起保存在GroupMembers中表格:-在

^{pr2}$

Tags: textnameidinputdatavargroupfunction
3条回答

这对我很有效:

 var checkIds = [];
        $(document).on("click","#group_save",function(){
          $("#candidate-data tr").each(function(index,rowhtml){
            var checked= $('input[id="groups"]:checked',rowhtml).length;
            checkIds = jQuery.unique(checkIds)
            if (checked==1){
              checkIds.push($('.hideMe',rowhtml).text());
            }
          });
          alert(checkIds);
          var groupName = $('input:text[name="group_name"]').val();
          alert(groupName);
            $.ajax({
                url: "{% url 'userinfo:groups' %}" + "?gname="+groupName+"&checkids="+checkIds,
                type: "POST",
                dataType: 'json',
                traditional: true,
                success: function(){
                        notyfy({type: "success", layout: "topCenter", text: "Saved", timeout: 5000});
                    }
            });
            checkIds.length = 0;

在你的视图.py

^{pr2}$

jsonText是js文件中用于描述JSON的变量的名称。它不是JSON结构中某些数据的键的名称。在下面的行中,将jsonText替换为实际的密钥名。在

request.POST.get('jsonText')

您应该能够使用以下工具:

var checkIds = [];
$(document).on("click","#group_save",function(){
  $("#candidate-data tr").each(function(index,rowhtml){
    var checked= $('input[id="groups"]:checked',rowhtml).length;
    checkIds = jQuery.unique(checkIds)
    if (checked==1){
      checkIds.push($('.hideMe',rowhtml).text());
    }
  });
  var groupName = $('input:text[name="group_name"]').val();
  $.ajax({
    url: "{% url 'userinfo:groups' %}",
    type: "POST",
    data: {
      "gname": gname,
      "checkids": checkIds.slice(0)
    },
    dataType: 'json',
    traditional: true,
    success: function(){
      notyfy({
        type: "success", 
        layout: "topCenter", 
        text: "Saved", 
        timeout: 5000
      });
    }
  });
  checkIds.length = 0;
});

然后在python方面只需使用:

^{pr2}$


简短的解释

首先,jQuery为您处理数据对象的转换,因此实际上不需要使用JSON.stringify或其他任何东西对其进行预处理,除非您要向服务器发送非常特定的格式。通过设置traditional: true,您要求jQuery使用以下格式转换数组参数:

checkids=value&checkids=value&checkids=value

而不是:

checkids[]=value&checkids[]=value&checkids[]=value

这一点很好地解释了here和{a2},但长短不一的是python/django支持使用.getlist()开箱即用的param序列化的“非方括号”形式。在

噢,checkIds.slice(0)(它创建了数组的一个副本)的原因仅仅是因为您稍后要设置checkIds.length = 0;,我脑子里的妄想症告诉我,如果ajax调用在稍后的执行周期中触发,那么如果我使用的是直接引用而不是副本,那么数组将是空的。这是极不可能的,因为ajax调用应该在被请求时立即触发,但是在处理像jQuery这样的黑盒或库时,我总是过于谨慎。。。你不应该迎合我的妄想症,而且很有可能安全地使用:

    data: {
      "gname": gname,
      "checkids": checkIds
    },

相关问题 更多 >