[英]Sending AJAX request to server with jQuery
我想使用AJAX向相同的网址发送一个非常基本的帖子请求。 它应该使用用户名,并对照数据库进行检查,以查看是否已经存在具有该名称的用户,并返回一个字符串。 发送请求的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完成,而只是在您的代码中进行。
要解决此问题,您必须使用回调函数:
http://api.jquery.com/jQuery.post/
jQuery.post(url [,data] [,success(data,textStatus,jqXHR)] [,dataType])
url包含请求发送到的URL的字符串。
数据与请求一起发送到服务器的映射或字符串。
success(data,textStatus,jqXHR)如果请求成功,则执行一个回调函数。
dataType服务器期望的数据类型。 默认值:Intelligent Guess(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")
});
首先,您认为有一些问题。 您需要检查POST是来自AJAX还是来自标准POST。 否则,您以后将无法实际添加用户。 (实际上,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
编辑:确保响应返回STRING真或STRING假
编辑:响应发送回STRING真或STRING假
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;
}
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.