2016-07-26 3 views
-1

私は、選択ボックスが変更されたというイベントで動作する次のコードを持っています。 変更されると、ajaxコールは結果を変数resultに渡します。 私の問題は、私はこの機能の外にそのデータを得ることができないということです。Javascript JQuery On変更を選択して結果を取得して外部に渡す

コード:

$('#myselect').on('change', function() { 
    $.ajax({ 
     url: 'myurl'+this.value, 
     method: 'GET', 
     success: function(result) { 
      console.log(result); //Just checking it's there 
      external = result; 
     } 
    }); 
}); 

console.log(external); //Returning Undefined 

私は上記の機能の外に、ここで利用可能にexternalを必要としています。

どうすればよいですか?

+0

可能な重複http://stackoverflow.com/questions/14220321/how-do-i-return-the-response-from-an -synchronous-call) –

答えて

2

あなたは、イベントの外と外部からのアクセスをより変数を作成することができます。 ajaxascychronあるとしてではなく、変数はまだundefined次のようになります。

var external; 

$('#myselect').on('change', function() { 
    $.ajax({ 
     url: 'myurl' + this.value, 
     method: 'GET', 
     success: function(result) { 
      external = result; 
     } 
    }); 
}); 

// this would be still undefined 
console.log(external); 

あなたのsuccess内部console.logを書き込み、または独自のコールバック関数を作成することができます。その後、ajaxリクエストの後に、データをログに記録したり、データを処理したりすることができます。あなたが直接ラッパーなしsuccessコールバックとしてコールバック関数を使用している場合でも、短い

$('#myselect').on('change', function() { 
    $.ajax({ 
     url: 'myurl' + this.value, 
     method: 'GET', 
     success: function(result) { 
      myCallback(result); 
     } 
    }); 
}); 

function myCallback(external) { 
    console.log(external); 
} 

は、それは、この例では可能であろう。 GETは、デフォルトの要求タイプがあるのでそして、私たちもそれを削除できます。あなたはドン以来、

$('#myselect').on('change', function() { 
    $.ajax({ 
     url: 'myurl' + this.value, 
     success: myCallback 
    }); 
}); 

function myCallback(external) { 
    console.log(external); 
} 
0

私は質問を誤解していた場合、私はごめんなさい:

あなたはexternalからデータを取得しようとしているが、AJAX呼び出しがまだコールバックを呼び出していないので、データということであるように聞こえる何設定されていません。

修正方法をお勧めする場合は、コールバック自体から外部参照するコードを呼び出して、必要なときにデータがあることを保証することができます。

-1

はそうのようなあなたの第一の機能上の変数外部を定義します。

var external; 

$('#myselect').on('change', function() { 


    $.ajax({ 
     url: 'myurl'+this.value, 
     method: 'GET', 
     success: function(result) { 

     console.log(result); //Just checking it's there 

     external = result; 


     } 

    }); 

}); 


console.log(external); 
+0

しかし、 'console.log(external);'はまだ 'undefined'を出力します。 ;) – eisbehr

+0

これは完全に間違っています。 –

0

あなたはそれがAjaxの完了後の画像に来るので、変数にアクセスすることはできませんし、あなたが直接それにアクセスしようとしています」トンこのAjaxはあなたがこの

$('#myselect').on('change', function() { 
    $.ajax({ 
     url: 'myurl'+this.value, 
     method: 'GET', 
     success: function(result) { 
     console.log(result); //Just checking it's there 
     saySomething(result); //result will be injected in this function after ajax completion 
    }); 
}); 

function saySomething(msg) { 
    console.log(msg); //use variable like this 
} 
0

のような関数を定義する必要があるので、私は私のコードは、あなたに助けを願うたびにかかる時間を正確な時間の任意のアイデアを持っています。

$('#myselect').on('change', function() { 
    $.ajax({ 
     url: 'myurl'+this.value, 
     method: 'GET', 
     async: false, // stop execution until response not come. 
     success: function(result) { 
      console.log(result); //Just checking it's there 
      external = result; 
     } 
    }); 
}); 

console.log(external); //now it should return value 
[私は非同期呼び出しからの応答を返すにはどうしますか?](の
関連する問題