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
    });
};
4

2 に答える 2

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);
});
于 2012-05-23T23:21:50.043 に答える
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;
};
于 2012-05-24T00:42:41.280 に答える