我正在尝试使用相对url和post ajax调用,如下所示:
当前网址路径:
http://localhost:8000/customer/0/location/0/user/0/
我需要换到不同的指南。
var absolute = "http://localhost:8000/customer/0/location/0/line_group/addLine/2/";//+phone_id;
var relative= "../../line_group/addLine/1"
$.get(relative,function(data){
//this works
alert(data);
});
$.ajax({
type: "POST",
url: relative,
data: "test=test1",
error:function(data){
//throws error when using relative path
alert('error');
},
success:function(data){
// works fine when using absolute path
alert('success');
}
});
//same thing using just post
$.post(relative,test,function(data){
//Error on relative path
alert(data);
return false;
});
对于我的get,绝对和相对url,返回数据。
但是对于POST调用,当我使用相对url时,我得到内部服务器错误。(绝对URL工作正常) 我不认为它与CSRF有关,因为在我看来我还包括@csrf_exempt用于测试目的。 (我在请求中包含https://docs.djangoproject.com/en/dev/ref/contrib/csrf/#ajax)
chrome调试器在使用相对URL的帖子调用时给出了以下错误消息。
Failed to load resource: the server responded with a status of 500 (INTERNAL SERVER ERROR) http://localhost:8000/customer/0/location/0/line_group/addLine/1
但是你可以看到它确实为我提供了我想要访问的完整网址链接。 当我直接点击链接时,我会得到该页面的数据。
视图非常简单:
@csrf_exempt
def addNewLine(request, customer_id, location_id, phone_id,**kwargs):
error_msg = u"No POST data sent."
context = {}
return render_to_response('line_group/mytest.html', context)
任何机构都有任何建议,为什么相对url路径在POST调用失败? 提前谢谢..
答案 0 :(得分:1)
在Chrome网络部分,如果您有DEBUG=True
,则可以预览错误说明。
由于var relative= "../../line_group/addLine/1"
末尾没有斜杠,因此CommonMiddleware可能会重定向您的请求。如果您想保留您的网址,请在项目设置中设置APPEND_SLASH = False
。