javascript变量等于函数的值

时间:2013-01-11 17:35:08

标签: javascript ajax

  

可能重复:
  How to return AJAX response Text?
  How to return the response from an AJAX call from a function?

所以我有一个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");

这可能吗?我一定做错了,但无法弄清楚如何实现这个结果。感谢

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

7 个答案:

答案 0 :(得分: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");
});

答案 1 :(得分: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
   });

答案 2 :(得分: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";
    }
}

答案 3 :(得分: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返回jqXHR,因此您可以使用.done

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

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

答案 4 :(得分:0)

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

function onlineStatus(){

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

答案 5 :(得分: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;
}

答案 6 :(得分: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");
    }