0

可能重复:
如何返回 AJAX 响应文本?
如何从函数的 AJAX 调用返回响应?

所以我有一个 javascript 函数,我正在执行 AJAX 调用以查看用户是在线还是离线。它看起来像这样。

function onlineStatus(){

    $.ajax({
        url: "assets/ajax/online-offline.php",
        cache: false,
        success: function(html){
          return html;
        }
    }); 
}

我想将此函数的值分配为我可以使用的变量。

像这样的东西。

var test = onlineStatus();

if (test == "true")
   alert("online");
else
   alert("offline");

这可能吗?我一定做错了什么,但不知道如何达到这个结果。谢谢

// 编辑:感谢大家的帮助,对不起,没有意识到这可能是一个重复的问题。我最初不确定要搜索什么,所以我没有看到任何相关内容。

4

7 回答 7

6

$.ajax是异步的,因此您无法从中返回任何内容onlineStatus,您需要向其传递一个回调函数,该回调函数可以在 ajax 调用完成时调用。

function onlineStatus(callback){

    $.ajax({
        url: "assets/ajax/online-offline.php",
        cache: false,
        success: callback
    }); 
}

onlineStatus(function(test) {
    if (test == "true")
       alert("online");
    else
       alert("offline");
});
于 2013-01-11T17:38:23.610 回答
4

由于调用是异步发生的,因此您必须将回调函数传递给onlineStatus. 就像是:

function onlineStatus(callback){

    $.ajax({
        url: "assets/ajax/online-offline.php",
        cache: false,
        success: function(html){
          callback(html);
        }
    }); 
}

然后调用它:

onlineStatus(function (html)
   {
      // Do stuff with the status
   });
于 2013-01-11T17:38:34.193 回答
1

AJAX 是异步的,这就是 A 的含义。你需要传递一个回调。

例如:

function onlineStatus(callback){

    $.ajax({
        url: "assets/ajax/online-offline.php",
        cache: false,
        success: callback
    }); 
}

onlineStatus(function(data) { 
    if (data == "true") { 
        alert "online"; 
    }
    else {
        alert "offline";
    }
}
于 2013-01-11T17:37:48.863 回答
1

您可以简单地使用延迟对象。

function onlineStatus(){

    var request = $.ajax({
        url: "assets/ajax/online-offline.php",
        cache: false
    }); 

    return request;
}



var test = onlineStatus();
test.done(function(html) {
    if (html)
       alert("online");
    else
       alert("offline");
});

$.ajax返回 a jqXHR,因此您可以使用.done

jqXHR.done(function(data, textStatus, jqXHR) {});

An alternative construct to the success callback option, the .done() method replaces the deprecated

于 2013-01-11T17:48:01.027 回答
0

$.ajax方法是异步的,因此您需要在回调中处理其返回值。

function onlineStatus(){

    $.ajax({
        url: "assets/ajax/online-offline.php",
        cache: false,
        success: function(html){
            if (html == "true")
                alert("online");
            else
                alert("offline");
        }
    }); 
}
于 2013-01-11T17:38:39.490 回答
0

你可以这样做......但这不是一个好方法,因为ajax的同步请求会使你的代码变慢......

function onlineStatus(){
var data;
    $.ajax({
        url: "assets/ajax/online-offline.php",
        cache: false,
        async:false,
        success: function(html){
           data = html;
        }
    }); 

return data;
}

或者
,如果您只想显示警报框,那么...

function onlineStatus(){

    $.ajax({
        url: "assets/ajax/online-offline.php",
        cache: false,
        success: function(html){
           if (html== "true")
            alert("online");
            else
            alert("offline");
        }
    }); 

return data;
}
于 2013-01-11T17:39:30.757 回答
0

jQuery ajax 调用是异步调用。您必须等待获得结果,然后才能使用它们显示警报。

    var isOnline = false;
    checkOnlineStatus();

    function checkOnlineStatus(){

        $.ajax({
            url: "assets/ajax/online-offline.php",
            cache: false,
            success: callback
            }
        }); 

    }
    function callback(html){
        isOnline = (html == "online");
        showAlert();
    }
    function showAlert(){
        if (isOnline == "true")
           alert("online");
        else
           alert("offline");
    }
于 2013-01-11T17:47:48.267 回答