我想在Django框架中创建一个ajax请求。但是,我没有传递从json中的客户端获取数据。它适用于我不使用Json的情况。 如果我在ajax中使用带有{'a':'value'}的dataType:'json',我无法在view.py中得到它,结果什么都没有... 但是如果我在ajax中使用数据:$(this).serializeArray(),我可以通过request.POST获得结果。但是,我真的需要自定义我的数据并发送到我的view.py其他数据而不是表单中的数据。我想发送一个{'a','mydata','form':myformdata} ... 有办法吗?
模板:
<form id="ajax2" action="/seghca/test-post/" method="post">{% csrf_token %}
Nom : <input type="text" name="nom" value="" id="nom"/><br/>
prenom : <input type="text" name="prenom" value=""/><br/>
<input type="submit" value="Envoyer"/>
</form>
<div id="result"></div>
的javascript:
$(document).ready(function(){
// POST AJAX
$("#ajax2").submit( function() {
var urlSubmit = $(this).attr('action');
var data = $(this).serializeArray();
data.push({
key: "keyName",
value: "the value"
});
$.ajax({
type: "POST",
url: urlSubmit,
dataType: "json",
data : data,//$(this).serializeArray(),
success: function(response){
var json_response = JSON.parse(response);
// now get the variables from the json_response
$('#result').html(json_response.html);
}
});
return false;
});
});
view.py(ajax启动test_post视图,home2是公式的视图):
from datetime import datetime
from django.http import HttpResponse, Http404
from django.shortcuts import redirect, render
from seghca.models import Article
from django.shortcuts import render_to_response
from django.http import HttpResponse
from django.template import RequestContext
from django.views.decorators.csrf import csrf_exempt
import json
def home2(request):
return render_to_response('seghca/form.html', context_instance=RequestContext(request))
@csrf_exempt
def test_post(request):
data = {'html': request.POST['key']}
return HttpResponse(json.dumps(data), mimetype="application/json")
答案 0 :(得分:1)
当您使用ajax视图时,您应该以json格式从视图中返回数据:
data = {'html': request.POST['input']}
return HttpResponse(json.dumps(data), mimetype="application/json")
其次,有必要首先在客户端解析响应:
success: function(response){
var json_response = JSON.parse(response);
// now get the variables from the json_response
$('#result').html(json_response.html);
}
第三,如果您需要传递表单数据以及您可以执行的更多信息:
var data = $(this).serializeArray();
data.push({
key: "keyName",
value: "the value"
});
第四,你缺少csrf令牌。
答案 1 :(得分:0)
将data: data,
更改为data: {'data': JSON.stringify(data)},
您将能够通过django中的POST['data']
访问数据的序列化版本。请记住,如果你想在django中使用它,你必须反序列化它,例如json.loads(POST['data'])
答案 2 :(得分:0)
我有同样的需求。我的解决方案是:
AJAX请求:
var posturl = $('#'+formid).prop('action');
$.ajax({
async:false,
type: "POST",
dataType: "json",
contentType: "application/x-www-form-urlencoded",
url : posturl,
data : $('#'+formid).serialize() + '&mode=ajax', //&mode=ajax is my custom data
success:function(response){
console.log(response);
alert(response.message);
},
timeout:10000
});
在views.py中:
data = {'error': '0', 'message': 'all was ok'}
return HttpResponse(json.dumps(data), mimetype="application/json")
以上内容适合您。我的测试是使用Django 1.6和Python 2.7.5