我在javascript中有一些数据,想把它发送到Django视图函数。之后,我想使用HttpResponse渲染Django模板,但它是如何工作的?
首先我用jQuery.ajax()将一些数据发送到Django视图并使用了响应数据,现在我想在第二个jQuery.ajax()中发送数据 - 在点击一个按钮后 - 到另一个Django如果我点击一个网站上的简单链接,查看功能,最后渲染一个简单的模板,就像它的工作方式一样。
为了清晰起见,我尽可能地剪掉了片段
$(matchfield).on('click', function(event) {
event.preventDefault();
var field = $(this).val();
$.ajax({
method: "POST",
url: "/view-function/",
data: { "field": field },
dataType: "json",
context: this,
success: function (data) {
if(data.message === 1) {
points = 100
$('#submit').on('click', function(event) {
event.preventDefault();
$.ajax({
url: "/another-view/",
method: "POST",
data: {"points": points},
success:function(response){ // I guess the mistake is here
$(document).html(response)
}
})
})
}
}
});
});
如果单击了#submit
按钮,则响应的状态代码为200,Chrome开发工具会在预览中显示完整的预期新html页面(没有css样式),但当前页面上没有任何内容。< / p>
这是回复:
<!DOCTYPE html>
<html>
<head>
// head stuff
</head>
<body>
// Some stuff
</body>
</html>
我使用了return HttpResponse(template.render(context, request))
我的观点 - 功能:
from django.http import HttpResponse
def another-view(request):
if request.method == "POST":
if request.POST.get("points"):
points = int(request.POST.get("points"))
template = loader.get_template('my_template.html')
context = {'message': "any message"}
return HttpResponse(template.render(context, request))
这就是我的视图功能的工作原理,点存储在数据库中,并且发生了一些魔法,但一切正常,请求状态码为200.
遗憾的是我不知道我忽略了什么。
来自AJAX的响应(内部ajax()与url:“/ another-view /”)是预期的HTML页面,但在当前页面上没有发生。我想替换整个页面
答案 0 :(得分:0)
我找到了问题的解决方案。要使用POST数据重定向到Django视图函数,您可以使用jQuery.redirect函数,该函数在包含来自https://github.com/mgalante/jquery.redirect的jquery.redirect.js之后可用
<强> USAGE:强>
/**
* jQuery Redirect
* @param {string} url - Url of the redirection
* @param {Object} values - (optional) An object with the data to send. If not present will look for values as QueryString in the target url.
* @param {string} method - (optional) The HTTP verb can be GET or POST (defaults to POST)
* @param {string} target - (optional) The target of the form. If you set "_blank" will open the url in a new window.
* @param {boolean} traditional - (optional) This provides the same function as jquery's ajax function. The brackets are omitted on the field name if its an array. This allows arrays to work with MVC.net among others.
* @param {boolean} redirectTop - (optional) If its called from a iframe, force to navigate the top window.
*/
$.redirect(url, [values, [method, [target, [traditional, [redirectTop]]]]])