看板 Python 關於我們 聯絡資訊
各位前輩好, 這兩天用django在練習,寫了一隻用ajax以POST方式送表單的程式, 可是不知道為什麼,雖然在瀏覽器(Chrome)可以看到POST傳出去的資料是正確的, 但是在程式讀取時卻發現request.POST是一個空的dictionary 大致的程式碼如下: AJAX: var name = $("input#Name").val(); var id = $("input#Id").val(); $.ajax({ url: "register", type: "POST", dataType: "json", contentType: "application/json", data: { id: id, name: name }, success: function(result){ ....(此處正常執行).... } error: fuction(){ .... } 基本上上面的程式碼都是可以正常運作的, 在瀏覽器的開發工具內可以看到資料都有出現。 view.py: .... from django.views.decorators.csrf import csrf_protect .... @csrf_protect def register(request): if request.method == 'POST': if request.is_ajax(): id = request.POST.get('id') name = request.POST.get('name') .... 略 另外還有設定csrf_token,看起來應該都有正常運作 設定方式是在ajax程式碼之前加上下面這一段: var csrftoken = $.cookie('csrftoken'); function csrfSafeMethod(method) { return (/^(GET|HEAD|OPTIONS|TRACE)$/.test(method)); } $.ajaxSetup({ beforeSend: function(xhr, settings) { if (!csrfSafeMethod(settings.type) && !this.crossDomain) { xhr.setRequestHeader("X-CSRFToken", csrftoken); } } }); 在form裡面也有寫{% csrf_token %} 看起來應該是可以順利執行,但是資料POST之後就消失了... 求各位前輩指點,謝謝>< -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 42.73.113.50 ※ 文章網址: https://www.ptt.cc/bbs/Python/M.1461249357.A.CDE.html
kenduest: POST json format 的話用 request.body 內找找 04/22 00:35
kajm: 感謝大大,可以順利抓到資料了!但是他不是以json的格式傳過 04/22 01:22
kajm: 來,而是用&分割,例如:id=1&name=kajm這樣..請問是不是我 04/22 01:22
kajm: 忽略了什麼參數設定呢QQ 04/22 01:23
kajm: 剛剛JSON.stringify(data)的方式轉換成功了!再次感謝 :) 04/22 01:40
ck574b027: 呃,contentType 即使是 json 還是會傳 query string吧 04/22 02:38