程式語言:Python
Package:
功能:只需更新部分網頁,無需全部重載
需要有專門處理 ajax 的網址,或是用 request.is_ajax() 區別處理
list
dictionary
jQuery.ajax( [settings ] )
參數依需求設定,只有 url 是必需
Package:
- Django
- json
功能:只需更新部分網頁,無需全部重載
# view.py from django.http import JsonResponse from django.views.decorators.csrf import csrf_exempt def ajax_jquery(request): is_ajax = False if request.is_ajax(): is_ajax = True test = {'GET': 'GET', 'array': [1, 2, 3, 4], 'a': request.GET['a'], // "b": [1, 2, 3] in index.html 'b[]': request.GET.getlist('b[]'), 'is_ajax': is_ajax, } return JsonResponse(test) @csrf_exempt #忽略 csrf def ajax_jquery_POST(request): is_ajax = False if request.is_ajax(): is_ajax = True test = {'POST': 'POST', 'is_ajax': is_ajax, } return JsonResponse(test)
兩種處理 csrf 的方法:
- @csrf_exempt,不執行確認機制,如上
- 在 template 加入設定如下
// index.html <script> $.ajaxSetup({ data: { csrfmiddlewaretoken: '{{ csrf_token }}' } }); </script>
回傳 json 的方法
# For Pre-Django 1.7 import json from django.http import HttpResponse response_data = {} response_data['result'] = 'error' response_data['message'] = 'Some error message' return HttpResponse(json.dumps(response_data), content_type="application/json")
# For Django 1.7+ from django.http import JsonResponse return JsonResponse({'foo':'bar'})
需要有專門處理 ajax 的網址,或是用 request.is_ajax() 區別處理
# urls.py import ajax.views url(r'^ajax_jquery/$', ajax.views.ajax_jquery, name='ajax-jquery') url(r'^index/$', ajax.views.index, name='index'),
jQuery 處理 ajax 的方法
jQuery.get( url [, data ] [, success ] [, dataType ] ) 等同$.ajax({ url: url, data: data, success: success, dataType: dataType });
list
# view.py def ajax_list(request): print(request.GET.get('name')) # "z-windr" a = range(100) # safe 預設為 True => 只能傳 dictionary # False => 可傳 dic 以外的物件 return JsonResponse(list(a), safe=False)
// index.html $.get("/ajax_list/", { name: "z-windr", phone: "123" }, function(data) { //返回值 data 在這裡是一個列表 for (var i = data.length - 1; i >= 0; i--) { // 把 data 的每一項顯示在網頁上 $('#result1').append(' ' + data[i]); } }); // output:99 98 97 ... 0
dictionary
# view.py def ajax_dict(request): is_ajax = False if request.is_ajax(): is_ajax = True name_dict = {'twz': 'python and Django', 'abc': 'teach Django', 'is_ajax': is_ajax} return JsonResponse(name_dict)
// index.html $.get("/ajax_dict/", function(data) { //返回值 data 在這裡是一個字典 for (var i in data) { // i 為 key,把 data 的每一項顯示在網頁上 $('#result2').append("<br>" + i + " : " + data[i] + "<br>"); } }); // output // twz : python and Django // abc : teach Django // is_ajax : true
jQuery.ajax( [settings ] )
參數依需求設定,只有 url 是必需
// index.html $.ajax({ url: "/ajax_jquery_sample/", data: { "a": "123", "b": [1, 2, 3] }, success: function(data) { //返回值 data 在這裡是一個字典 for (var i in data) { // 把 data 的每一項顯示在網頁上 $('#result5').append("<br>" + i + " : " + data[i] + "<br>"); } }, // 錯誤時執行的函式 error: function(xhr, ajaxOptions, thrownError) { alert(xhr.status); alert(thrownError); }, //請求完成時執行的函式(不論結果是success或error)。 complete: function(XMLHttpRequest, textStatus) { // the options for this ajax request alert("complete : " + textStatus); }, //發送請求之前可在此修改 XMLHttpRequest 物件 //如添加 header 等,你可以在此函式中 return flase 取消 Ajax request。 beforeSend: function(XMLHttpRequest) { // the options for this ajax request alert("beforeSend"); }, type: "POST", //預設為 GET dataType: "json" //無指定自動選擇 });簡單版
$.ajax({ url: "/ajax/", data: { "a": "123", "b": [1, 2, 3] }, success: function(data) { //返回值 data 在這裡是一個字典 for (var i in data) { // 把 data 的每一項顯示在網頁上 $('#result3').append("<br>" + i + " : " + data[i] + "<br>"); } } });
留言
張貼留言