Django에서 AJAX 게시 후 리다이렉트
저는 Django의 내장 DeleteView를 사용하고 있습니다.이것에 값을 할당했습니다.success_url기여하다.템플릿에서는 JQuery의 $.post() 메서드를 사용하여 이 뷰를 트리거합니다.아이템이 삭제되었을 때, 나는 다음 주소로 리다이렉트 되지 않는다.success_url검색한 결과, 리다이렉트를 무시하는 AJAX 포스트 메서드의 문제인 것 같습니다.
설정 기능을 추가하여 수정했습니다.window.location="#myRedirectionURL"세 번째 파라미터로서$.post()JQuery에 있습니다.
하지만, 이 방법은 장고가 아닌 것 같다.기본적으로 장고가 아닌 AJAX의 관점에서 문제를 해결합니다.더군다나, 그것은 남는다.success_urlDeleteView를 사용할 수 없습니다(단, 값을 할당해야 합니다).success_url또는 Django가 오류를 발생시킵니다).
그럼 AJAX를 통해 글을 올릴 때 리다이렉트 되는 것이 올바른 방법인가요?더 좋은 방법이 없을까요?
정말 고마워요.
Ajax가 페이지를 리디렉션하지 않습니다!
리다이렉트로부터 얻을 수 있는 것은, POST 응답의 데이터 오브젝트내의 새로운 페이지의 html 코드입니다.
어떠한 조작이 실패했을 경우, 유저의 리다이렉트처를 알고 있는 경우는, 다음과 같이 간단하게 실시할 수 있습니다.
서버에서는
에러가 있는 경우
response = {'status': 0, 'message': _("Your error")}
모든 게 잘되면
response = {'status': 1, 'message': _("Ok")} # for ok
응답 보내기:
return HttpResponse(json.dumps(response), content_type='application/json')
html 페이지에서 다음을 수행합니다.
$.post( "{% url 'your_url' %}",
{ csrfmiddlewaretoken: '{{ csrf_token}}' ,
other_params: JSON.stringify(whatever)
},
function(data) {
if(data.status == 1){ // meaning that everyhting went ok
// do something
}
else{
alert(data.message)
// do your redirect
window.location('your_url')
}
});
사용자를 어디로 보내야 할지 알 수 없고 서버에서 해당 URL을 가져오려면 해당 URL을 매개 변수로 보내십시오.
response = {'status': 0, 'message': _("Your error"), 'url':'your_url'}
창 위치에 있는 것으로 대체하십시오.
alert(data.message)
// do your redirect
window.location = data.url;
http://hunterford.me/how-to-handle-http-redirects-with--jquery-and-django/
편집: 소스를 사용할 수 없습니다.
이건 나한테 효과가 있어, 아마 해킹처럼 보일거야
장고 미들웨어
from django.http import HttpResponseRedirect
class AjaxRedirect(object):
def process_response(self, request, response):
if request.is_ajax():
if type(response) == HttpResponseRedirect:
response.status_code = 278
return response
자바스크립트
$(document).ready(function() {
$(document).ajaxComplete(function(e, xhr, settings) {
if (xhr.status == 278) {
window.location.href = xhr.getResponseHeader("Location");
}
});
});
django-ajax의 ajaxPost는 일반 리다이렉트(URL)를 전달(json 응답)한 경우 리다이렉트를 허용합니다.제 경우 Jquery ajax() 메서드가 작동하지 않았습니다.
언급URL : https://stackoverflow.com/questions/29137910/redirecting-after-ajax-post-in-django
'programing' 카테고리의 다른 글
| AngularJS - 컨트롤러에서 날짜 변환 (0) | 2023.03.04 |
|---|---|
| 상위 상태 변경 후 하위 구성 요소가 업데이트되지 않음 (0) | 2023.03.04 |
| 중첩된 경로 angularjs를 사용할 때 "상태에서...를 해결할 수 없습니다" 오류가 표시됨 (0) | 2023.03.04 |
| 게시 후 폼 값을 유지하는 방법 (0) | 2023.03.04 |
| 여러 개의 . then()은 단일 angularjs 약속에 있습니다.모두 _original_데이터를 사용합니다. (0) | 2023.03.04 |