2011-12-04 15 views
0

私は基本的な問題を絞りました。配列の範囲はIE9とFireFox(とChrome)が異なります。javascript配列の範囲はIE9とFireFox/Chromeが異なります

以下の関数(抜粋のみ)では、配列を宣言してから$ .getJSON()を呼び出して配列を宣言します。 HoldEmを参照している行はProcessArray関数内(boolSortArray分岐内)で発生するため、私はその時点でsortedWorkingが利用可能であると推測しています。それはIE9にありますが、FireFox/Chromeではありません。引用された行で、sortedWorkingはFireFox/Chromeで空です。どのブラウザでもエラーは発生しません。

実験では、sortedWorkingは "$ .getJSONの終わり"と書かれた行の直前に配置され、その行の直後は空であることが示されています。何かご意見は?

function ProcessArray(arWorking, boolSortArray, idX, isPartners, isChildren) { 
//... 
var sortedWorking = []; 
if(boolSortArray) { 
    $.getJSON('MurakiMaida.json', function(data) { 
    $.each(data.person, function(i, xdata) { 
    ... 
    sortedWorking.push(targetID + ":" + birthYear); 
    ... 
    }); //end of $.each 
    }); //end of $.getJSON 

    var HoldEm = BubbleSort(sortedWorking); 
+0

データの例も私たちと共有しますか?配列が '、'で終わるとIEが混乱することを知っていましたか?明らかに(私はWindowsを使用しません)、IEのものは配列 '[1,2、]'の長さが3です。実際には問題を引き起こしているデータかもしれません。 –

+0

良い点ですが、JSONLintを使用してデータを検証するので、私の場合はチャンスではありません。そして覚えています - それはIE9です。 –

答えて

3

あなたのコールに "$ .getJSONは()" 非同期です。呼び出しに続くコード行に配列を代入することはできません。代わりに、配列の内側にある配列に依存するコードをに入れてください。

function ProcessArray(arWorking, boolSortArray, idX, isPartners, isChildren) { 
//... 
var sortedWorking = []; 
if(boolSortArray) { 
    $.getJSON('MurakiMaida.json', function(data) { 
    $.each(data.person, function(i, xdata) { 
    ... 
    sortedWorking.push(targetID + ":" + birthYear); 
    ... 
    }); //end of $.each 

    var HoldEm = BubbleSort(sortedWorking); 
    // ... whatever else ... 
    }); //end of $.getJSON 

さて、これはまた、あなたのを返した後も同様に、まだは、配列が読み込まれていますことを確認することができない、ので、あなたの「ProcessArray」機能自体は、再思考する必要があることを意味してもよいです。一般的には、「$ .getJSON()」自体が従うのとまったく同じパターンに従うことです:コールバックパラメータを「ProcessArray()」に追加して、クライアントが配列が持つときに呼び出される関数を渡すことができるようにします取得され、ソートされ、他に何が行われたかを示します。

+0

この回答は、問題を投稿してから数時間後に私に届きました。つまり、その解決策が私に来た。あなたは_answer_を提供しましたが、ここで何が起きているのか(または起きていないのか)非同期で調べる必要があります。だから、あなたがコンプリートハンドラと呼ぶものの前に私の後続のコードを移動しました。うまく動作します。たとえそれが私でないとしても、このことを理解している人がいることを知ってうれしいです! –

関連する問題