2012-05-23 151 views
0

我想從一個方法(pollServiceForInfo)返回一個JSON對象,但是當我在方法完成後提醒它時它似乎會「丟失」。我知道這是一個範圍界定問題,但是我很難理解如何進行。洞察力將不勝感激。範圍問題:值丟失

var id=null; 
var jsonData = JSON.stringify({searchRequest:{coordinates: "1,2,3 1,2,3 1,2,3 1,2,3 1,2,3"}}); 
$.post("rest/search",jsonData, function(json){ 
    id = json.searchResponse.id; 
}) 
.error(function(jqXHR, textStatus, errorThrown){ 
    alert("obj.responseText: "+jqXHR.responseText + " textStatus: "+textStatus+" errorThrown: "+errorThrown); 
}) 
.success(function(data, status, obj){ 
    // process initial request 
    var json = pollServiceForInfo(id); // method below 

    alert(json); // says undefined 
}); 



var pollServiceForInfo = function(id){ 
    //alert('id in pollServiceForInfo '+id);  
    var jsonResults; 
    $.get("rest/poll/"+id,function(data){ 
     jsonResults = data.pollResponse; 

    }).error(function(){ 
     alert('returning error'); 
     return "error"; 
    }).success(function(){ 
     alert('returning data '+jsonResults); 
     return jsonResults; // is lost after it's returned 
    }); 
}; 
+1

你的代碼是一個爛攤子,替換'後()'和'阿賈克斯()'它會使你的代碼更加清晰 – gdoron

回答

0

你不能有用地從異步函數返回。請改爲:

var pollServiceForInfo = function(id, callback){ 
    //alert('id in pollServiceForInfo '+id);  
    var jsonResults; 
    $.get("rest/poll/"+id,function(data){ 
     jsonResults = data.pollResponse; 

    }).error(function(){ 
     alert('returning error'); 
     callback("error"); 
    }).success(function(){ 
     alert('returning data '+jsonResults); 
     callback(jsonResults); // is lost after it's returned 
    }); 
}; 

pollServiceForInfo(id, function(json) { 
    alert(json); 
}); 
+0

這是我跟着去的解決方案。非常適合我尋找的東西。謝謝! – Dan

0

您試圖從成功回調中返回。你想要的是內pollServiceForInfo()的返回,就像這樣:

var pollServiceForInfo = function(id){  
    var jsonResults; 
    $.get("rest/poll/"+id,function(data){ 
     jsonResults = data.pollResponse; 
    }).error(function(){ 
     alert('returning error'); 
     jsonResults = "error"; 
    }).success(function(){ 
     alert('returning data '+jsonResults);   
    }); 

    return jsonResults; 
}; 
+0

我想把邏輯保留在成功方法中,因爲方法之外的任何東西都有可能在成功完成之前執行。 – Dan

+0

你說得對,我會用Erics解決方案 – Elad

+0

在$ .get之前用'return'更新我的代碼 – Dan