4

在我的 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)

这样我首先发布值用户名。如果用户名已经存在结果更改,然后我得到它。

诀窍是将发布请求放入获取请求中。

4

4 回答 4

2

不要使用 $.post,而是使用 $.ajax 命令。它们做的事情完全相同,但 $.ajax 为您提供了更多可玩的功能。

$.ajax({
  type: 'POST',
  url: "/auth_validate",
  data: {
    'username': username
  },
  success: function(data){
    //There was successfully data here!
  },
  error: function(xhr, data, error){
    //An error was thrown!
  }
});

然后在此行上方添加一行将返回 403(或类似)HTTP 错误代码(我会提供它,但我不熟悉 Django 的来龙去脉):

error = 'Sorry this username is already taken'

这样,您的成功消息将通过成功处理程序路由,您的错误将通过错误处理程序路由。

于 2012-12-19T15:43:00.037 回答
1

如果用get表示GET方法,为什么不直接在 url 参数中添加查询?

  var username = $('#username').val()
   $.post('/auth_validate?myvar=thevalue', {'username': username}, function(data) { 
   // Get Request to get something.
   }

但也许我误解了这个问题......

于 2012-12-19T15:43:10.613 回答
0

您可以返回一个 http 代码 400(错误请求)并为您的请求添加一个错误处理程序post,这应该可以解决问题。

我对 django 不是很熟悉,所以我只是给你一个抽象的想法。

于 2012-12-19T15:39:47.483 回答
0

我认为你应该看看dajax API。这将完成这项工作。

于 2012-12-19T15:40:04.840 回答