2017-02-21 25 views
0

私は変数にajaxの結果を格納しようとしています。私がconsole.logを使用すると、私の望むHTMLタグが与えられますが、グローバル変数に設定しようとすると、それはundifinedと言います。私はグローバル変数結果のajaxを変数に格納できない

var result; 
 
$.ajax({ 
 
    url: "person.html", 
 
    success: function(data){ 
 
    //result=data; 
 
    console.log(data); 
 
    } 
 
}); 
 
//console.log(result);

+0

'は'にconsole.log(結果)ので、 'result = data'の前で実行してください – George

+1

可能な重複http:// stackoverflow。com/questions/23667086/my-variable-un-changed-in-a-function-asyncの中で –

+0

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

答えて

2

アヤックスにAJAX結果を保存することができますどのように

は、コードが同時に実行されているものの結果を見つけるためにすることを意味し、非同期であるコンソールログ値がコンソールログに記録されるまでに結果が設定されていないため、結果が未定義になっています。

私が知っている唯一の方法は、ajaxの成功関数内で行うか、コンソールログを含む後続の関数をajax success関数で呼び出すことです。コンソールにログオンする前に値が返されていることを確認する唯一の方法です。

例:

例1:

var result; 

$.ajax({ 
    url: "person.html", 
    success: function(data){ 
     result=data; 
     console.log(result); 
     //Note that in this instance using the variable 'result' is redundant, as you could simply console.log data like you're already doing. 
    } 
}); 

例2:それはすべてをあなたに結果をやりたいと思っているどのくらいに依存

var result; 

$.ajax({ 
    url: "person.html", 
    success: function(data){ 
     result=data; 
     subsequentFunction(result); 
    } 
}); 

function subsequentFunction(result){ 
    console.log(result) 
} 
// Note that if you're doing something simple with result that this could be a bit long winded and unnecessary. 

どのオプションだろうにより良くなる。

注: 'async'と呼ばれるajax呼び出しのプロパティもあります。これをfalseに設定すると同期させることができますが、これは他のコードが実行されるのを防ぐため一般的に悪い考えです。結果が返され、ブラウザがロックされます。あなたのコードは、応答を受け取るために起こっている知っているが、それは外部ソースに依存しますので、この応答はで来るとき、それは知っていないことを意味し、約束を返しアヤックス

1

ajaxリクエストは非同期なので、ご質問の回答を得る前にconsole.log(result)が実行されています。このようなことをする必要があります

var result;

$.ajax({ 
    url: "person.html", 
    success: callback(data) 
}); 

function callback (data){ 
    result=data; 
    console.log(result); 
} 
1

データがまだ入力されていないとは限りません。特定のケースでは、実際には応答を待つ必要があります。あなたは以下のスニペットを使ってそれを達成することができます。あなたは、アレイにデータをプッシュすることができ、このように別の関数にアクセスすることができますように

$(document).ready(function(){ 
    var data = $.parseJSON($.ajax({ 
     url: 'person.html', 
     dataType: "json", 
     async: false 
    }).responseText); 
    var myProp = data.property; // Here you can access your data items 
}); 

のアプローチは、次のようになります。です

var result =[]; 

$(document).ready(function() 
{ 
    $.ajax({ 
    url: 'person.html', 
    async:true, 
    dataType: "json", 
    success: function(data) 
    { 
     result.push(data); 
    } 
    }); 
}); 
NewFunction() 
{ 
    console.log(result); 
} 
関連する問題