我有以下功能
function checkIfUserExist(userName){
$.ajax({
type : "POST",
url : "/test/checkUserName/",
data : "userName=" + userName,
success : function(data) {
return data;
}
});
}
我试图从另一个函数中调用它
$('#userName').blur(function() {
alert ( checkIfUserExist($('#userName').val()) );
}
每次我在警告框中收到undefined
。但它应该在警告框中显示返回值。
如何解决这个问题?
答案 0 :(得分:2)
你不能像这样从ajax调用中返回值。因为ajax是异步进程,所以它不会等待成功事件发生。如果你想这样做,你应该尝试同步ajax。 像这样的东西
function checkIfUserExist() {
return $.ajax({
type: "POST",
url: "/test/checkUserName/",
async: false
}).responseText;
}
但这不是一件好事。它也会冻结浏览器。你可以做的好事是捕捉ajax的Success事件并做相应的事情
答案 1 :(得分:1)
这是正确的行为,因为ajax是异步的。
要实现目标,您需要Jquery.when
$('#userName').blur(function() {
$.when(
checkIfUserExist($('#userName').val())
)
.then(function( data ) {
alert( data );
});
});
答案 2 :(得分:-1)
不要从ajax返回值,因为这是异步调用,在成功之前将调用alert
,结果将始终为undefined
在success
回调中提醒输出。
function checkIfUserExist(userName){
$.ajax({
type : "POST",
url : "/test/checkUserName/",
data : "userName=" + userName,
success : function(data) {
alert( data );
}
});
}
只需在此处调用此功能
$('#userName').blur(function() {
checkIfUserExist($('#userName').val());
}
答案 3 :(得分:-1)
数据不应该是json格式吗?
data: { "userName": userName }
另外,请考虑使用"完成"功能而非成功。这应该有助于调用的异步性质。