ajax调用返回undefined如何解决这个问题

时间:2014-02-26 08:00:54

标签: javascript jquery ajax

我有以下功能

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。但它应该在警告框中显示返回值。

如何解决这个问题?

4 个答案:

答案 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 }

另外,请考虑使用"完成"功能而非成功。这应该有助于调用的异步性质。