我正在使用Django 1.2.3开发一个站点。我的ajax get请求可以正常工作,但是post请求以开发模式(127.0.0.1:8000)工作,但当我使用apache + nginx将网站推入生产环境时不能工作。Django的帖子不能正常工作:
下面是一个例子
urls.py:
(r'api/newdoc/$', 'mysite.documents.views.newdoc'),
views.py
def newdoc(request):
# only process POST request
if request.is_ajax():
data= dict(request.POST)
# save data to db
return HttpResponse(simplejson.dumps([True]))
在javascript:
$.post("/api/newdoc/", {data : mydata}, function(data) { alert(data);}, "json");
我的警报不会被调用.. ..这是一个问题,因为e我想通过django表单清理这些数据,并且发布的请求似乎没有将其发送到服务器(仅在生产环境中)。
我到底做错了什么?
更新:
溶液:CRSF令牌需要被推动AJAX POST请求(未获取)作为django的1.3
也,每链路在下面提供,下面的JavaScript
$.ajaxSetup({
beforeSend: function(xhr, settings) {
if (!(/^http:.*/.test(settings.url) || /^https:.*/.test(settings.url))) {
// Only send the token to relative URLs i.e. locally.
xhr.setRequestHeader("X-CSRFToken",
$("#csrfmiddlewaretoken").val());
}
}
});
需要更改如下:
$.ajaxSetup({
beforeSend: function(xhr, settings) {
if (!(/^http:.*/.test(settings.url) || /^https:.*/.test(settings.url))) {
// Only send the token to relative URLs i.e. locally.
xhr.setRequestHeader("X-CSRFToken",
$('input[name="csrfmiddlewaretoken"]').val());
}
}
});
方式csrf t奥肯得到的形式必须在1.25 - 1.3之间变化?不管怎么说,它都可以工作。感谢大家的全力帮助
使用萤火虫或webkit的检查员来查看请求发生了什么,我打赌那里有500错误。 – 2011-04-17 21:40:09
其实我得到403禁止 – josephmisiti 2011-04-17 23:02:22
...是用户登录,试图发送该Ajax形式? – 2011-04-18 00:30:55