Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用jQuery向服务器发送AJAX请求_Javascript_Jquery_Ajax_Django - Fatal编程技术网

Javascript 使用jQuery向服务器发送AJAX请求

Javascript 使用jQuery向服务器发送AJAX请求,javascript,jquery,ajax,django,Javascript,Jquery,Ajax,Django,我想使用AJAX向同一url发送一个非常基本的post请求。它应该使用用户名,并对照数据库进行检查,以查看具有该名称的用户是否已经存在,并返回相应的字符串。发送请求的javascript函数有问题: function usernameCheck(){ $.post("http://omnicloud.me/signup", {username: $("#username").value}, function(response){ if(response=="true"){

我想使用AJAX向同一url发送一个非常基本的post请求。它应该使用用户名,并对照数据库进行检查,以查看具有该名称的用户是否已经存在,并返回相应的字符串。发送请求的javascript函数有问题:

function usernameCheck(){
$.post("http://omnicloud.me/signup", 
  {username: $("#username").value}, 
  function(response){
    if(response=="true"){
       $('#passAlert').innerHTML("Sorry, that username is already taken")
    }
});

return !($('#passAlert').value == "Sorry, that username is already taken")
}
如果此人正在加载注册视图,则返回该页面,否则,将调用该页面以检查是否存在用户:

def signup(request):
    if request.method == 'GET':
        return render_to_response('signup.html', context_instance=RequestContext(request))
    else: 
    #query db for user with username provided in POST, return if it exists
        user = User.objects.get(username=request.POST["username"]) 
        if user is not None:
            return HttpResponse("true")
        else:
            return HttpResponse("false")
关于JS被忽略的原因,你能看到什么吗?萤火虫什么也没找到

Ajax的意思是“异步JavaScript和XML”,因此它不会等待$.post完成,而是在代码中继续

要解决此问题,必须使用回调函数:

jQuery.post(url[,data][,success(data,textStatus,jqXHR)][,, 数据类型])

url包含请求发送到的url的字符串

数据随请求一起发送到服务器的映射或字符串

success(data、textStatus、jqXHR)执行的回调函数 如果请求成功。

dataType预期来自服务器的数据类型。违约: 智能猜测(xml、json、脚本或html)

样本:

function usernameCheck(){
    $.post("http://omnicloud.me/signup", 
      {username: $("#username").val()}, 
      function(response){
        if(response=="true"){
           $('#passAlert').html("Sorry, that username is already taken")
        }
    });
}
您还可以传递匿名回调:

function usernameCheck(successCallback){
    $.post("http://omnicloud.me/signup", 
      {username: $("#username").val()}, 
      function(response){
       if(response=="true") successCallback();
    });
}

// Somewhere else in your code:

usernameCheck(function(){
  $('#passAlert').html("Sorry, that username is already taken")
});

编辑:确保响应发回字符串true或字符串false

编辑:响应将返回字符串true或字符串false

function usernameCheck(){
    var exists;
    $.post("http://omnicloud.me/signup", { username: $("#username").val() }, 
      function(response){
         exists = (response == 'true');
         if(exists){
             $('#passAlert').innHTML = "Sorry, that username is already taken";
             return false;
         } else {
             return true;
         }
    });

首先,你的观点有一些问题。您需要检查帖子是来自AJAX还是标准帖子;否则,您以后将无法实际添加用户。(实际上,AJAX部分应该是它自己的视图,因为它本身并不是注册过程的一部分,而是一个验证检查。稍后,您可能真的希望通过AJAX创建一个用户,但您无法这样做,因为视图无法区分两个不同的AJAX请求)

接下来,当对象不存在时,
get
不返回
None
;它会引发一个
ObjectDoesNotExist
异常。因此,您的
if
语句在那里不起作用;您必须改用
try

我已相应地更新了您的以下视图:

def signup(request):
    if request.method == 'GET':
        return render_to_response('signup.html', context_instance=RequestContext(request))
    elif request.is_ajax(): 
        # query db for user with username provided in POST, return if it exists
        try:
            user = User.objects.get(username=request.POST["username"]) 
        except User.DoesNotExist:
            return HttpResponse("false")
        else:
            return HttpResponse("true")
    else:
        # Normal post, add new user

可能与以下内容重复:
$(“用户名”).value
?应该类似于
$('#username').val()
$('.username').val()
等。Chris,基本上有两个错误:关闭$.post语句有点太快,必须将响应与“true”进行比较。检查下面我的答案。这就是全部!因此,为了保存响应,我将在帖子上方定义
var exists
,然后放置一个简单的函数,只将值分配给exists?在旁注上,JQuery选择器和方法似乎也有问题。我猜它应该是
$(“#username”).val()
如果(存在){
在ajax请求发出之前执行complete@Ghommy如何确保它等待响应?我会将其余代码抛出回调函数,但它只会从该函数返回,而不是checkUsername()。我用您的建议更新了代码。您可以使查询同步,以便它们等待返回-但是异步的东西要好得多。这里:方法usernameCheck不会返回true/false该答案没有任何帮助,因为显然,提出问题的人和给出此答案的人都需要更好地理解异步啊,我有一个adduser视图来处理用户创建,但我想这会更好!我不必使用AJAX创建它们,因为它们无论如何都必须重定向到它们的配置文件,但我会记住这一点!谢谢!