发布并获取相同的jquery请求

时间:2012-12-19 15:35:17

标签: javascript jquery ajax django

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

这样我首先发布值username。如果用户名已经存在结果更改,那么我就明白了。

诀窍是在get请求中放置一个post请求。

4 个答案:

答案 0 :(得分: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'

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

答案 1 :(得分:1)

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

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

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

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

我认为你应该看看the dajax API。这样就可以了。