欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Django和前端用ajax传输json等数据(常用于表单数据传输)

程序员文章站 2023-11-02 13:12:10
需要传输的是下图中所有的input中客户端设置的数据 整个页面是用js生成,代码不长,但是用了许多拼接,看起来开比较乱,页面的核心就是下面的部分,有一些关键参数部分就不放了,要是觉得乱可以跳过这个 下面开始重点,将表单中的数据以json在ajax发送给后端 这里的格式和,分割符一定要注意,格式不对不 ......

需要传输的是下图中所有的input中客户端设置的数据

Django和前端用ajax传输json等数据(常用于表单数据传输)

整个页面是用js生成,代码不长,但是用了许多拼接,看起来开比较乱,页面的核心就是下面的部分,有一些关键参数部分就不放了,要是觉得乱可以跳过这个

Django和前端用ajax传输json等数据(常用于表单数据传输)

下面开始重点,将表单中的数据以json在ajax发送给后端

function btnchange(values) {
    var arglist=["xxx","xxx","xxx",,
       // 。。。这里的关键参数删了
        ];  
    var dict = {}; 
    for (var i=0;i<arglist.length;i++)
    {
        dict[arglist[i]+"qxl"]=$("input[name="+arglist[i]+"qxl]").val();
        dict[arglist[i]+"kkx"]=$("input[name="+arglist[i]+"kkx]").val();
    } 
    console.log(dict); 
    
    $.ajax({
        beforesend : function(xmlhttprequest){
            //xmlhttprequest.setrequestheader("aadfasdfsdfasdsasasdcccc","ajax");
        },

        url:"/visualpage/getwarningset/",
        type: "post",
        datatype: "json",
        data:dict,
        complete: function (data) {
         //console.log('aaa')
        },
        success:function(data){
            console.log(data);
           // window.open("/visualpage/returnwarning","","width=800,height=600");
            // $(".text").text(data.message);
        },        
    });     
     console.log(values.name);   //slice(0,-3) 
    var warningshow=document.getelementbyid("warning");
    warningshow.style.display='block';

}
url为请求的地址,type提交类型(post,get等),datatype这里用json表示提交的数据格式为json,
data这里是要提交的数据,以字典形式,success为服务器成功响应后要执行的函数,

这里的格式和,分割符一定要注意,格式不对不会发送成功

再看视图里面

from django.views.decorators.csrf import csrf_exempt
@csrf_exempt
def getwarningset(request):
    if request.is_ajax():
        #print(request.post)
        elename1=[
            "xxx","xxx","xxx",
            #这里省略关键参数
        ] 
        k=0
        while k<len(elename1):
            startargsset[elename1[k]]["qxl"]=request.post.get(elename1[k]+'qxl', '')
            startargsset[elename1[k]]["kkx"]=request.post.get(elename1[k]+'kkx', '')
            k+=1
        bxml=dicttoxml.dicttoxml(startargsset,custom_root='warning')
        xml=bxml.decode('utf-8')

        dom=parsestring(xml)
        pxml=dom.toprettyxml(indent='   ')
        f=open(os.path.join(settings.base_dir,'visualmodule/xmldata/warning.xml'),'w',encoding='utf-8')
        f.write(pxml)
        f.close()
    return 'http_'
  
is_ajax()可以判断是否是ajax请求,如果前段是用get来发送好像是不用这个函数来检测

直接用request.post.get("json中的键值")即可获取对应数据

一般通过 return jsonresponse(name_dict)这样来响应给前段数据,我这里没有进行这一步,只返回了一个

return 'http_',

这里是直接将数据转换为xml存储到服务器,只是为了序列化用户的设置,会有别的视图函数来专门解析xml到字典发送到前端,所以我使用ajax只是为了实时存储用户设置,并不会立即反馈给用户。

ajax可以用来来传输json,字典,字符串,数组等格式的数据

下面是ajax另一种格式,比上面的格式简化多了

$.get("/add/",{'a':a,'b':b}, function(ret){
            $('#result').html(ret);
        })

还有javascript原生的用法,需要的可以自行选择

 var xmlhttp;
    //创建ajax对象
    if (window.xmlhttprequest)
    {// code for ie7+, firefox, chrome, opera, safari
        xmlhttp=new xmlhttprequest();
    }
    else
    {// code for ie6, ie5
        xmlhttp=new activexobject("microsoft.xmlhttp");
    } 
    
     //onreadystatechange 事件中的就绪状态时执行的函数:
    xmlhttp.onreadystatechange=function()
    {
        if (xmlhttp.readystate==4 && xmlhttp.status==200)
        {
            document.getelementbyid("mydiv").innerhtml=xmlhttp.responsetext;
            
            //xml
            xmldoc=xmlhttp.responsexml;
            txt="";
            x=xmldoc.getelementsbytagname("artist");
            for (i=0;i<x.length;i++)
            {
                txt=txt + x[i].childnodes[0].nodevalue + "<br>";
            }
            document.getelementbyid("mydiv").innerhtml=txt;
        }
    }
    //向服务器发送请求
    xmlhttp.open("post","ajax_test.html",true);
    xmlhttp.setrequestheader("content-type","application/x-www-form-urlencoded");
    xmlhttp.send("fname=henry&lname=ford");