2016-05-22 11 views
1

なんらかの理由で、 "p"が未定義として返されます。どうすれば配列を返すことができますか?ファンクションで要求と戻り値を取得する

function doT() { 
    var pe; 
    $.get("https://www.google.com", function(data) { 
    pe = ["a", "b", "c"]; 
    }); 
    return pe; 
} 

var p = doT(); 
setTimeout(function() { console.log(p.length); }, 1200); 
+1

DoTは何も返しません - なぜ結果は期待できますか? –

+0

今それがあります。私はget要求がまだ完了していない場合にのみ、setTimeoutを置くだけで、空白のPEを返していました。 –

+1

[非同期呼び出しからの応答を返すにはどうすればよいですか?](http://stackoverflow.com/questions/14220321/how-do-i-return-the-response-from-an-asynchronous-call) –

答えて

2

方法の一つはpromiseを使用するようになります(それについて読んで):

今、それが原因でCORSの拒絶ブロックに行く(それについて読む):

var promise = new Promise(function(resolve, reject) { 
 
    var pe; 
 
    $.ajax("https://www.google.com") 
 
    .done(function() { 
 
     pe = ["a", "b", "c"]; 
 
     resolve(pe); 
 
    }) 
 
    .fail(function() { 
 
     reject("error"); 
 
    }); 
 
}); 
 
promise.then(function(result) { 
 
    $("#testing").text(result); 
 
}, function(err) { 
 
    $("#testing").text(err); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div id="testing"></div>

だけ作ります有効なajax呼び出しがあれば動作します。さらに詳しい説明が必要な場合はコメント。

0
function doT() { 

    var pe = $.get("https://www.google.com", function(data) { 
    pe = ["a", "b", "c"]; 
    }); 

return pe; 
} 

alert(doT()); 
+0

これはテストしましたか? – digglemister

+0

一般的に、回答には、コードの目的を説明し、他者を紹介せずに問題を解決する理由が含まれていると、はるかに役立ちます –

関連する問題