我正在开发一个Django应用程序,我遇到了ajax和jQuery的问题。
在我的页面上,我有一个单击按钮时调用的javascript函数。这个函数的目的是创建一个ajax 调用django视图方法。在这个方法中,使用一些与AJAX调用一起发送的POST数据完成了一些逻辑,如果操作成功,我想返回 另一个页面,否则,我只是希望用户保持在同一页面上,并且会使用javascript向用户显示通知。
下面的是一段代码:
(JavaScript)的
function makeCall() {
$.post(url, data, function(data) {
if(data=="ERROR") {
alert("THERE WAS AN ERROR");
} else {
//send user to a new page.
}
});
}
(Django的Python)的
def viewMethod(request):
//LOGIC... Renders page using POST data.
if success:
//... preparing the response.
return HttpResponse(t.render(c))
else:
return HttpResponse("ERROR", content_type="text/plain")
如果操作成功,如何使用javascript / jQuery向用户显示响应页面?
由于
答案 0 :(得分:1)
在viewMethod中,您可以使用POST数据而不是整个页面来呈现页面,也就是说,您将响应的页面只有body标签而不是head。
if success:
return HttpResponse('<body><p>SUCCESS</p></body>')
并在前端
$.post(url, data, function(data) {
if(data=="ERROR") {
alert("THERE WAS AN ERROR");
} else {
$('tip').append(data)
}
});
如果您仍然使用整个页面,它的形式如下:,您可以使用window.open或iframe标记来处理它。 但我建议只回复一些html片段。
答案 1 :(得分:1)
除非在Django中有一些特性,否则应该没有什么可以阻止POST请求与GET请求的行为不同。两者都应该能够返回URL字符串。
如果您希望接收网址并替换当前文档,请尝试以下操作:
function makeCall(url, data) {
function newPageError(jqXHR, textStatus, errorThrown) {
alert(textStatus + ' : ' + errorThrown);
}
$.post(url, data).success(function(data, textStatus, jqXHR) {
if(!data.match(/^http/)) {
newPageError(jqXHR, data, textStatus + ' - but error indicated');
} else {
location.href = data;
//location.replace(data);//alternative; gives different Back button behaviour
}
}).fail(newPageError);
}
或者,如果您希望收到HTML代码段并在当前文档中工作,请尝试以下操作:
function makeCall(url, data) {
function newPageError(jqXHR, textStatus, errorThrown) {
alert(textStatus + ' : ' + errorThrown);
}
$.post(url, data).success(function(data, textStatus, jqXHR) {
if(data.toUpperCase() == 'ERROR') {
newPageError(jqXHR, 'ERROR', textStatus + ' - but error indicated');
} else {
$("#myDiv").html(data); //change jQuery selector to suit
}
}).fail(newPageError);
}
注意:
url
和查询参数data
传递给函数。