使用ajax POST方法向Django View发送JSON对象数组时,我得到403(Forbidden Error)。我已经包含了csrf令牌,但它仍然给出了相同的错误。我正在对不同的事件进行2个不同的ajax调用,其中一个正常工作而另一个发出403错误。 这是我的代码:
此POST请求正常。
$(document).on('submit','#dataset', function (e) {
e.preventDefault();
$.ajax({
type:'POST',
url:'/savedataset/',
data:{
lat:$('#lat').val(),
long:$('#long').val(),
csrfmiddlewaretoken:$('input[name=csrfmiddlewaretoken]').val()
},
success:function (data) {
alert(data);
},
error:function () {
alert("Error")
}
})
});
以上是请求的view.py:
def savedata(request):
if request.method == 'POST':
lat = request.POST['lat']
long = request.POST['long']
nsrpt.objects.create(
latitude=lat,
longitude=long
)
response_data = {"lat": lat, "long": long}
return HttpResponse(json.dumps(response_data), content_type="application/json")
但是这个会返回403错误:
$(document).ready(function () {
$('#Save').click(function (e) {
$.ajax({
type:'POST',
url:'/savenetwork/',
dataType:'json',
data:{
networkdata: JSON.stringify(grapharr),
csrfmiddlewaretoken:$('input[name=csrfmiddlewaretoken]').val()
},
contentType:'application/json',
success:function (data) {
alert(data);
}
})
})
})
这里“grapharr”是一个动态创建的数组,每个索引都有json对象,这个POST请求的视图是view.py:
import json
from django.core import serializers
from django.http import HttpResponse
from django.shortcuts import render
def savenetwork(request):
if request.method == 'POST':
data = json.load(request.body)
response_data = {"data" : "Test"}
return HttpResponse(json.dumps(response_data), content_type="application/json")
以下是grapharr的创建方式:
var grapharr = [];
function pushtoarray2(lat, long) {
var lati = lat;
var longi = long;
var node = new Object();
node.latitude = lati;
node.longitude = longi;
node.connectednodes = [];
grapharr.push(node);
}
CSRF令牌在此处定义:
<form id="dataset"> {% csrf_token %}
<fieldset>
<p>
<label>Latitude</label>
<input id = "lat" value = "" />
</p>
<p>
<label>Longitude</label>
<input id = "long" value = "" />
</p>
<p>
<button name="Add" value="Add" type="button" onclick="addmarker()">Add</button>
</p>
<select id="myselect" multiple size="5">
</select>
<p>
<button name="Connect" value="Connect" type="button" onclick="getSelectValues()">Connect</button>
</p>
<p>
<button name="Delete" value="Delete" type="button" onclick="deletelatlong()">Delete</button>
</p>
<input type="submit" value="Submit">
<p>
<button id="fetch" name="fetch" value="fetch" type="button">Fetch</button>
</p>
</fieldset>
<div id="map"></div>
<p>
<button id="Save" name="Save" value="Save" type="button">Save Network</button>
</p>
<p>
<button name="Clear" value="Clear" type="button" onclick="printArray()">Clear Map</button>
</p>
这是url.py
from django.conf.urls import url
from networkeditor import views
urlpatterns = [
url(r'^$', views.index, name = 'index'),
url(r'^savedataset/$', views.savedata),
url(r'^fetchdata/$', views.fetchdata),
url(r'^savenetwork/$', views.savenetwork),
]
我尝试了很多但是在所提到的每个地方都包含了已经存在的csrf令牌。请帮助我找到我在这里失踪的东西。我是django / ajax的新手。