0

我在這個非常小的問題上掙扎了1.5個小時。 情況:文件A - >對文件B的請求,如果文件B返回true,則用戶被註冊並且不需要被添加到我們的數據庫中。如果爲false,則用戶登錄Facebook,但從未登錄 - >添加到數據庫。FB.api()方法可以防止返回真或假

我的問題:FB.api()阻止我的函數由於異步調用返回true。

function registered(){ 
       FB.api('/me', function(response) { 
        $.ajax({ 
        async: true, 
        url: "facebook-sdk/src/check.php", 
        type: "POST", 
        data: {id: response.id}, 
        success: function(data) { 
         if(data=='true'){ 
          return true; 
         }else{ 
          return false; 
         } 
        } 
        }); 
       });      
} 

而且我調用該函數:

if(registered()) 
    alert('true'); 
else 
    register(); 

回答

1

你可以改變這樣的:

function registered(callback){ //pass callback function as parameter 
    FB.api('/me', function(response) { 
     $.ajax({ 
      async: true, 
      url: "facebook-sdk/src/check.php", 
      type: "POST", 
      data: {id: response.id}, 
      success: function(data) { 
       callback(data); 
      } 
     }); 
    });      
} 
//call registered function 
registered(function(response) { //callback function here 
    if(response) { //if true is returned 
     alert("Registered Already"); 
    } 
    else { 
     your_register_function(); 
    } 
}); 
+0

我想你誤解了我一點點。我的問題是,當我在if(data =='true')中返回true時,由於異步(FB.api())而調用該函數時,它將返回false,我該如何編輯此函數以便它將返回真正? – Jordy

+0

@Jordy看到我更新的答案。你的意思是這樣的..? –

+0

感謝您的幫助,稍微修改了您的代碼以使其正常工作!從來不知道Javascript中的回調選項。你能解釋你的第二個函數名嗎?在編輯已註冊(功能(響應))後才能正常工作 – Jordy