2012-01-25 14 views
1

私は4つの異なる配列を返すjqueryでajax呼び出しを持っています。 これら3つの配列のうち3つは、Ajaxの成功関数の外で使用したいので、配列内のデータは特定のクリックイベントでアクセス可能でなければなりません。関数内のjquery変数、グローバルを扱う方法は?

私は配列変数を扱う最良の方法を知らないだけです。 一部の人々はグローバル行くことは悪い考えであり、他はそのOK ...そう

Ajaxの成功機能言う言う: は配列2は、他の機能によって使用され、クリックする必要があり、配列

配列1の1でものを行いますイベント

function display_results_1(){ 
$('#myDiv').html(array1.id); 
} 


$('#binfo').click(function(){ 
    $('#client_info_div').dialog({ 

    $('#myDiv').html(array2.id); 

    }); 
}) 

これは私のAJAX呼び出しです:

$('#c_search').submit(function(){ 
      data = ($(this).serialize()); 

      $.ajax({ 
       url: 'actions/get_company.php', 
       type: 'POST', 
       data: data, 
       cache: false, 
       dataType: 'json', 
       success: function(selected){ 
`doing stuff here` 
    }) 
    }) 

私はAjaxがダを取得するために呼び出して、別使うべき異なる機能ごとに必要なとき

+0

グローバルに行くことは、あなたのjavascriptのための良い考えではありません。可能であれば、グローバル名前空間を汚染しないようにしてください。 –

+0

これはコンセンサスなので、jqueryで使用できるようにこれらの変数を適切な場所に配置するにはどうすればいいですか?関数を呼び出さずに、それらを使用する関数に渡しますか?その機能が実際に呼び出されるまで、彼らは「座る」でしょうか? –

+1

匿名関数を「名前空間」として使用して、すべてをきれいに区切り、メモリ管理を容易にする必要があるという合意があります。しかし、人々がしばしば言及していないことは、高度なレベルのjavascriptの知識が必要です(スコープを実行して、ある時点でモニタを落とす問題を解決します)。準備ができていない場合は、グローバル変数を使用してください。 – Malk

答えて

0

の初めにあってもよい:

$(function() { 
    var array1 = []; 
    var array2 = []; 

    function display_results_1(){ 
$('#myDiv').html(array1.id); 
} 


$('#binfo').click(function(){ 
    $('#client_info_div').dialog({ 

    $('#myDiv').html(array2.id); 

    }); 
}) 

$('#c_search').submit(function(){ 
      data = ($(this).serialize()); 

      $.ajax({ 
       url: 'actions/get_company.php', 
       type: 'POST', 
       data: data, 
       cache: false, 
       dataType: 'json', 
       success: function(selected){ 
`doing stuff here` 
    }) 
    }) 

}); 

これを行うことで、コードがページの読み込みでも実行されていることを確認します。関数をラップする$()を確認してください。

詳細はhttp://api.jquery.com/ready/を参照してください。

これまでの回答とは逆に、グローバル化は良い考えではありません。あなたは、同じ変数を使用して複数のJavaScriptを持つことになるかもしれません。

+0

SoWeLieありがとうございます。簡潔に思えますし、正しい方向に向かうと思います... –

+1

あなたも大歓迎です。これはhttps://developer.mozillaでもご覧になれます。org/ja/Introduction to Object-Oriented_JavaScript。より多くのJavaScriptを追加するにつれ、かなり面倒になることがあります。 JavaScriptをオブジェクトに整理すると、オブジェクトをよりきれいに保つのに役立ちます。 – SoWeLie

+0

ちょうど1つの質問... json配列が選択されています.array1とselected.array2。したがって、成功関数の内部では、すでに宣言されているarray1およびarray2変数にこれらを代入しますか? –

0

は、Ajaxの成功関数内ウィンドウオブジェクトに配列を割り当てます。

function ajaxSuccess(response){ 
    window.array1 = response.array1; 
    window.array2 = response.array2; 
    ... 
} 
0

あなたはそれが成功の関数の外部で使用する必要がある場合は、関数の外で変数を設定します。

var myarray1= new Array(); 

$.ajax(function() {.... 
    success(function(data) { 
     myarray1 = data.array 

関数のスコープ外の変数が必要な場合は「グローバルになる」ことを心配しないで、必要な場所に設定してください。良い場所は、あなたは間違いなくグローバルスコープであなたの変数をしたくないが、あなたはグローバルスコープにあることからそれらを防ぐために、機能のすべてを包むことができ$(document).ready()

関連する問題