2015-10-12 124 views
0

我有這樣回調自定義功能

function is_register(user_id){ 
    $.ajax({ 
     method: "POST", 
     url: "functions.php", 
     data: {user_id: user_id, action: "is_registred"} 
    }).done(function(data) { 
     return data; 
    }); 
} 

我想在我的代碼在其他地方執行此功能的功能,但它不工作:

is_register(user_infos.id, function(is_registred_status){ 
    console.log(is_registred_status); 
} 

正如你所看到的,我希望在繼續之前完成「is_register」函數的完成,所以我做了一個回調函數來記錄結果。我錯在哪裏?

回答

1
function is_register(user_id , callback) 
{ 
    $.ajax({ 
     method: "POST", 
     url: "functions.php", 
     data: {user_id: user_id, action: "is_registred"} 
    }).done(function(data) { 
     if(callback) 
      callback(data); 
    }); 
} 
3

只要添加一個函數作爲參數並不能使它「回調」 :)
您將在「正確」的地方,把它的is_register內。

另一個問題是is_register函數中的.done()部分。在傳遞的回調函數中,您將返回$.ajax()調用收到的值。但是,這是無用的價值將無法訪問(How to return the response of an asynchronous call

在這種情況下,我反而會返回$.ajax()jqXHR object)的返回值和移動.done()部分is_register功能之外。

function is_register(user_id){ 
    return $.ajax({ 
     method: "POST", 
     url: "functions.php", 
     data: {user_id: user_id, action: "is_registred"} 
    }) 
} 

is_register(user_infos.id) 
    .done(function(is_registred_status){ 
     console.log(is_registred_status); 
    }; 
+0

嘿,你需要添加一些描述以及你的代碼,它是一個不好的質量代碼。沒有想到這是從你的名聲的人。 – dreamweiver

0

您需要使用jQuery.when(),它提供了一種方法來執行基於一個或多個對象,代表異步事件通常遞延對象的回調函數。

jQuery代碼:

function is_register(user_id){ 
    return $.ajax({ 
    method: "POST", 
    url: "functions.php", 
    data: {user_id: user_id, action: "is_registred"} 
    }).done(function(data) { 
    return data; 
    }); 
} 

$.when(is_register(user_infos.id)).done(function(){ 
    console.log(is_registred_status); 
}); 

注:如果它只是一個單一的延遲對象的目標定位像錫這種情況下,那麼你不需要使用$.when(),而不是.done()/.success()回調可用於該目的。

+0

這不會工作,因爲'is_register'的返回值是'undefined' – Andreas

+0

啊,沒有注意到,現在'is_register()'會返回一個延遲對象 – dreamweiver