2013-01-11 74 views
0

可能重複:
How to return AJAX response Text?
How to return the response from an AJAX call from a function?JavaScript變量等於從函數值

所以我在那裏我在做一個AJAX調用一個JavaScript函數來查看用戶是否在線或離線。它看起來像這樣。

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"); 

這可能嗎?我一定在做錯事,但不知道如何達到這個結果。謝謝

//編輯: 感謝您的幫助每個人,抱歉,沒有意識到它可能是一個重複的問題。我不確定最初要搜索什麼,所以我沒有看到任何相關的內容。

+0

你不能直接這樣做,因爲AJAX是默認異步的。要麼你必須爲'$ .ajax'指定'async:false'選項,否則你需要另一種方法來做到這一點。 – marekful

回答

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

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"; 
    } 
} 
+0

@MikeChristensen:謝謝。一個簡單的錯字,現在已修復。 –

4

由於調用異步發生,您必須將回調函數傳遞到onlineStatus。喜歡的東西:

onlineStatus(function (html) 
    { 
     // Do stuff with the status 
    }); 
0

$.ajax方法是異步的,所以你需要處理在回調的返回值:

function onlineStatus(callback){ 

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

然後用調用它。

function onlineStatus(){ 

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

你可以像這樣.......但是由於阿賈克斯同步請求,使你的代碼慢是不是一個好方法.......

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

return data; 
} 


如果你只是想dispaly警告框,然後...

function onlineStatus(){ 

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

return data; 
} 
+0

奇怪的是,從來不知道jQuery有一個同步模式..這是要求麻煩。 –

+0

由於async = false,「data」會從「html」中得到真/假,所以函數會因此而返回....「同步」 – sourcecode

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"); 
    } 
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