天天看點

ajax的json格式資料

什麼是Ajax:

         通過js語言跟背景進行互動的一個東西

                   -特點:異步,局部重新整理

                   ajax往背景送出資料

                   $.ajax({

                            url:'請求的位址',

                            type:'get/post',

                            data:{key:value,key2:value2},

                            success:function(data){

                                     alert(data)

                            }

                   })

         1 背景傳回json格式

         2 問?傳回render,傳回redirect?

         基于ajax寫一個登陸功能,一旦登陸成功,跳轉到百度,登陸失敗,在頁面顯示使用者名或密碼錯誤

         總結:

                   1 後端如果傳回JsonResponse,前端的ajax内部會自動将json格式字元串轉換成字典

                   2 後端如果傳回HttpResponse,前端的ajax内部不會給你自動轉換,拿到的data是字元串類型,需要手動JSON.parse(data)來轉成字典

                   3 字元串轉字典:JSON.parse(data)

                     字典轉字元串:aa=JSON.stringify(字典對象)

                   4 如果前端傳的格式是json格式,django不會處理body中的内容,需要自己處理

                     隻有前端傳的格式是urlencoded,form-data格式,django才會給我處理

前段:
 $('.btn').click(function () {
         data1={name:$('.name').val(),pwd:$('.pwd').val()};
        $.ajax({

            url:'/login/',
            type:'post',
            contentType:'application/json',
            data:JSON.stringify(data1),
            {#data:data1,#}
            success:function (data) {
                $('.p1').text(data.msg)
            }
        })
    })      
背景:
def login(request):
#     if request.method == 'GET':
#         return render(request, 'login.html')
      if request.method == 'POST':
#         print(request.POST)
#         print(request.body)
#         data = request.body.decode('utf-8')
#         data = json.loads(data)
#         print(type(data))
#         # name=data.get('name')
#         # pwd=data.get('pwd')
#         name = data['name']
#         pwd = data['pwd']
#         user = models.User.objects.filter(name=name, 
#            pwd=pwd).first()
#
#         if user:
#             dic = {'msg': '登陸成功'}
#             return JsonResponse(dic)
#         else:
#             dic = {'msg': '登入失敗'}
#             return JsonResponse(dic)      
前段: 
$('#submit').click(function () {
    $.ajax({
        url:'/login/',
        type:'post',
        data:{name1:$("#name").val(),pwd2:$("#pwd").val()},
        success:function (data) {
            //背景用JsonResponse傳回資料
            //data 就會被轉成字典
            console.log(data)
            console.log(typeof data)
            //JSON.parse(data) 把字元串類型轉成字典
            data=JSON.parse(data)
            {#JSON.stringify()#}
            console.log(typeof dat1)
            if(data.status == 100){
                //成功,跳轉到指定頁面
                //location.href=位址,前端就會跳轉到指定的url
                alert(data.msg)
                //$("#error").text(data.msg+'正在跳轉')
                //location.href=data.url
            }else{
                $("#error").text(data.msg)
            }
        }
    })
})      
def login(request):
    dic={'status':100,'msg':None}
    if request.method == 'GET':
        return render(request, 'login.html')
    # if request.is_ajax():
    if request.method=='POST':
        name=request.POST.get('name1')
        pwd=request.POST.get('pwd2')
        if name=='lqz' and pwd=='123':
            dic['msg'] = '登陸成功'
            # 想讓前端跳轉
            # dic['url']='http://www.baidu.com'
            dic['url']='/test/'
        else:
            # 傳回json格式字元串
            dic['status']=101
            dic['msg']='使用者名或密碼錯誤'
        # return JsonResponse(dic)
        return HttpResponse(json.dumps(dic))      

轉載于:https://www.cnblogs.com/zhouhai007/p/10285175.html