2012-04-09 90 views
0

我有2個函數:1檢查用戶是否登錄,如果他這麼做 - 它會調用第二個函數來獲取他的用戶ID。現在我只是用警報測試它,看看我是否得到參數。使用Javascript從函數獲取值

這是第一個功能:

//Checking if the user is logged in or not 
$(function(){ 
$.getJSON("inc/API.php", {command : "getUserName"}, 
    function(result){ 
     if(result==null){ 
      $("#divGreeting").html("Hello, guest!"); 
      $("#divLogin").hide(); 
      $("#divUserOption").hide(); 
      $("#divConnectOption").show(); 
     } 
     else { 
      alert(getUserID(result)); 
      $("#divGreeting").html("Hello, "+result+"!"); 
      $("#divHeader").html("Hello, "+result+"! <a href='javascript:logout()'>Logout</a>"); 
      $("#divUserOption").html("Hello, "+result+"! <a href='javascript:logout()'>Logout</a>"); 
      $("#divConnectOption").hide(); 
      $("#divLogin").hide(); 
      $("#divUserOption").fadeIn(300); 
     } 
    }); 
}); 

這是第二個函數,應該返回的用戶標識之一:

function getUserID(){ 
$.getJSON("inc/API.php", 
{ 
    command : "getUserID" 
}, 
function(result){ 
    alert(result); 
    return result; 
}); 
} 

第一功能的alertundefined,而第二個提醒確實有userID。我爲什麼不能將它的價值返回到第一個函數?爲什麼我會得到`undefined?

謝謝!'

回答

1

Ajax是異步的。你不能從它返回一個值。

什麼是正在試圖做的是類似於:

function foo() { 
    $('button').click(function() { return 1; }); 
} 
var not_one = foo(); 

在這個例子中,沒有返回值的按鈕被點擊,直到(它不是foo返回值反正)。使用Ajax時,直到HTTP響應到達時纔會返回該值。

您必須處理回調函數中的數據,而不是嘗試返回到調用函數。

+0

我試圖用回調,但猜測沒有錯。我試了一下這樣的:'函數getUserID(回調){ \t $ .getJSON( 「INC/API.php」, \t { \t \t命令: 「getUserID」 \t}, \t功能(結果){ \t \t alert(result); \t \t callback(result); \t}); }'但仍然是'未定義'。我究竟做錯了什麼?謝謝! – Igal 2012-04-09 14:21:47

0

試試這個:

//Checking if the user is logged in or not 
$(function(){ 
$.getJSON("inc/API.php", {command : "getUserName"}, 
    function(result){ 
     if(result==null){ 
      $("#divGreeting").html("Hello, guest!"); 
      $("#divLogin").hide(); 
      $("#divUserOption").hide(); 
      $("#divConnectOption").show(); 
     } 
     else { 
      getUserID(function(result) { 
       $("#divGreeting").html("Hello, "+result+"!"); 
       $("#divHeader").html("Hello, "+result+"! <a href='javascript:logout()'>Logout</a>"); 
       $("#divUserOption").html("Hello, "+result+"! <a href='javascript:logout()'>Logout</a>"); 
       $("#divConnectOption").hide(); 
       $("#divLogin").hide(); 
       $("#divUserOption").fadeIn(300); 
      }); 
     } 
    }); 
}); 

,然後你getUserID功能:

function getUserID(callback){ 
    $.getJSON("inc/API.php", 
    { 
     command : "getUserID" 
    }, 
    callback 
} 

編輯

你說,你需要使用的用戶名的字符串連接方面:

但是,如果每次都必須發出AJAX請求,這是不可能的,除非正在使用阻塞,同步呼叫,這根本不是好習慣。如果您在加載頁面時將用戶名存儲在變量中,則可以使用該變量。如果你想仍然使用每一個它的使用時間提出要求的功能,它會做這樣的事:

function getUserName(callback) { 
    $.getJSON("inc/API.php", {command : "getUserName"}, callback); 
} 

getUserName(function(result){ 
    //do username processing here 
}); 
+0

呃,它很接近...現在,這部分'getUserID(function(result){(「#divGreeting」)。html(「Hello,」+ result +「!」);'有點搞砸了,它用來從' $ .getJSON(「inc/API.php」,{command:「getUserName」}, function(result)'並顯示一個UserName,但是現在它顯示了用戶ID。我如何獲得UserName和userID? !謝謝 – Igal 2012-04-09 14:41:20

+0

忘了提,最終將用戶名的代碼看起來應該是這樣的:'"+result(displays the userName here)+"' – Igal 2012-04-09 14:45:30

+0

它會以同樣的方式爲我有我的回答做,所有的Ajax調用必須是異步的,這樣類型的字符串連接將無法與AJAX一起使用,除非您使用的是同步調用,這是完全不可接受的 – nathanjosiah 2012-04-09 14:49:55

相關問題