私の Django アプリでは、同じ jQuery リクエストで投稿して取得できるようにしたいと考えています。
私のHTML:
<form method="post" id='validation_form'>
{% csrf_token %}
<input id='username' type="text" name="username" value=""/>
<button type="submit">Submit</button>
</form>
JS:
var username = $('#username').val()
$.post('/auth_validate', {'username': username}, function(data) {
// Get Request to get something.
}
ビュー:
def auth_validate(request):
error = False
if request.method == 'POST':
username = request.POST.get('username')
if User.objects.filter(username__exact=username).exists():
error = 'Sorry this username is already taken'
以前投稿したのと同じ jQuery リクエストで「エラー」を取得したいと思います。それは可能ですか?
ご協力ありがとうございました。
編集:これが私が見つけた解決策です。
JS:
function validateForm() {
var username = $('#username').val()
var result=''
$.get('/auth_validate_username/', {'result':result}, function(data){
$.post('/auth_validate_username/', {'username': username}, function(data) {
$('#error_message').html(data);
});
});
return false;
};
html:
<form method="post" onsubmit="return validateForm();">
{% csrf_token %}
<input id='username' type="text" name="username" value=""/>
<div id='error_message'></div>
<button type="submit">Submit</button>
</form>
ビュー:
def auth_validate_username(request):
result = ''
if request.method == 'POST':
username = request.POST.get('username')
if User.objects.filter(username=username):
result='Sorry but this name is already taken'
return HttpResponse(result)
このようにして、最初にユーザー名の値を投稿します。ユーザー名が既に存在する場合は結果が変わり、それを取得します。
トリックは、get リクエスト内に post リクエストを入れることでした。