2016-02-19 70 views
0

我有這種情況,我必須通過AJAX檢查某些內容,然後返回結果。 或簡化:AJAX調用後從嵌套函數返回

function isValid() { 
    $.ajax(URL, data, function(response) { 
     isValid = response; 
    }); 
    return isValid; 
} 

但仍然無法使它。

我可以訪問響應,但我不能讓isValid返回後我得到響應。 例如解決我遇到無處不在:

function isValid() { 
    function checkOnServer(callback) { 
     $.ajax(URL, data, function(response) { 
      callback(response); 
     }); 
    } 
    checkOnServer(function(response) { 
     alert(response); 
    }); 
} 

我遇到了這個遍佈#1,但問題是:

  1. 我不想提醒這一點。
  2. 我想從isValid()返回它。

===========================

編輯:我忘了提,如果你/我/我們嘗試簡單地從「checkOnServer」中「返回」 - 它只會將其返回到AJAX的成功回調。但這裏的目標是讓「isValid」返回結果...... :)

+3

不能從異步方法返回。您正在嘗試將送貨披薩送到您的房子之前。您需要使用回調或承諾。你需要改變你的邏輯。 – epascarello

+2

可能重複[如何返回來自異步調用的響應?](http://stackoverflow.com/questions/14220321/how-do-i-return-the-response-from-an-asynchronous-call) – Hatchet

回答

0

你的代碼是合理的,但是你在isValid()中使用你的回調函數,所以它不提醒!,我也有點點改變你的Ajax功能如下

function isValid() { 
    checkOnServer(function(response) { 
    alert(response); 
    }); 
} 
function checkOnServer(callback) { 
    $.ajax({ 
     url : URL, 
     data : data, 
     success : function(response) { 
      callback(response); 
     } 
    }); 
} 

編輯

變量是不能從異步方法返回嗎?如果我們調用使用Ajax功能,通話功能立即運行之前,首先阿賈克斯響應,所以它會僅使用上述方法返回undefined。 AJAX功能後

There is two method I've know to return from asynchronous function

調用完成

function isValid() { 
    var data; 
    checkOnServer(function(response) { 
    data = response; 
    }); 
    return data; 
} 
function checkOnServer(callback) { 
    $.ajax({ 
     url : URL, 
     data : data, 
     async : false    
    }).done(function(response){ 
     callback(response); 
     }); 
} 
console.log(isValid()); 

分配變量,responseText

function isValid() { 
var data = checkOnServer(); 
return data; 
} 
function checkOnServer() { 
    var data = $.ajax({ 
       url : URL, 
       data : data, 
       async : false //must set async to false 
       }); 
    return data.responseText; 
} 
console.log(isValid()); 
+0

而在你的表揚 - 你如何使isValid()返回響應? –

+0

回調函數不能返回變量,因此我們將所有回調函數中的代碼都做了回調函數。您希望如何處理回調函數? ,這樣做isValid() –

+0

「isValid」是遺留的,我必須使用它。我唯一能做的就是在那裏添加東西並修改「返回」聲明。 (但爲了執行驗證,它總是應該返回「true」或「false」。) –