ブラウザからのajaxリクエストに応答するビューを作成しました。それはそのように書かれています-
@login_required
def no_response(request):
params = request.has_key("params")
if params:
# do processing
var = RequestContext(request, {vars})
return render_to_response('some_template.html', var)
else: #some error
# I want to send an empty string so that the
# client-side javascript can display some error string.
return render_to_response("") #this throws an error without a template.
どうすればいいのですか?
クライアント側でサーバーの応答を処理する方法は次のとおりです-
$.ajax
({
type : "GET",
url : url_sr,
dataType : "html",
cache : false,
success : function(response)
{
if(response)
$("#resp").html(response);
else
$("#resp").html("<div id='no'>No data</div>");
}
});
render_to_response
は、テンプレートのレンダリング専用のショートカットです。そうしたくない場合は、空のHttpResponse
を返すだけです:
from Django.http import HttpResponse
return HttpResponse('')
ただし、この状況では私はそれを行いません-エラーがあったことをAJAXに通知しているので、おそらくコード400を返す必要があります-これを行うことができます代わりにHttpResponseBadRequest
を使用します。
空の応答を返すのに最適なコードは204 No Content
です。
from Django.http import HttpResponse
return HttpResponse(status=204)
ただし、204は The server *successfully* processed the request and is not returning any content.
を意味するため、空の応答を返さないでください。
エラーが クライアント側 であることをよりよく示すために、いくつかの4xx
ステータスコードを返すことをお勧めします。 Yoは4xx
応答の本文に任意の文字列を挿入できますが、JSONResponse
を送信することを強くお勧めします。
from Django.http import JsonResponse
return JsonResponse({'error':'something bad'},status=400)