2012-03-21 6 views
0

2つのデータを取得して比較するのに役立つ必要があります。ajax呼び出しからそれぞれ2つのオブジェクトを取得して比較する方法は?

私がここで作成しようとしているのは、グループを従業員と関連付けるシステムです。従業員の詳細ページにいる間、ユーザーにはポップアップを表示するボタンがあります。このポップアップには、従業員が関連付けることができるグループのリストがあります。リスト(ボタンセットとしてのチェックボックス入力のアレンジ)にすべてのグループが入力されたら、従業員が既に関連付けられている各グループをチェックして強調表示したいと思います。

私は、次のコードでこれを達成しようとしません(ただし、失敗)午前:私はAJAX呼び出しの中にAJAX呼び出しを行うことを前提と

function loadAllGroups() { 
var iGroupID; 
var iGroupName; 
$.ajax({ 
    type: 'POST', 
    url: '../Processes/process_Groups.aspx/GetGroups', 
    contentType: 'application/json; charset=utf-8', 
    data: '{}', 
    dataType: 'json', 
    success: function (aData) { 
     var AllGroups = aData.d; 
     var EmployeeGroups; 
     $.ajax({ 
      type: 'POST', 
      url: '../Processes/process_Groups.aspx/GetGroupsPerEmployee', 
      contentType: 'application/json; charset=utf-8', 
      data: '{EmployeeID: ' + EmployeeID + '}', 
      dataType: 'json', 
      success: 
       function (eData) { 
        EmployeeGroups = eData.d; 
       }, 
      error: 
       function (jqXHR, textStatus, errorThrown) { errorBox.append(jqXHR.responseText); } 
     }); 
     $.each(AllGroups, function (aIndex, aGroup) { 
      var iChecked = ''; 
      $.each(aGroup, function (aKey, aVal) { 
       if (aKey == 'GroupID') { iGroupID = aVal } 
       if (aKey == 'GroupName') { iGroupName = aVal } 
      }); 
      $.each(EmployeeGroups, function (eIndex, eGroup) { 
       $.each(eGroup, function (eKey, eVal) { 
        if (eKey == 'GroupID') { 
         if (iGroupID == eVal) { iChecked = 'checked="checked"' } else { iChecked = '' } 
        } 
       }); 
      }); 
     GroupsList.append('<input type="checkbox" id="Group_' + iGroupID + '" value="' + iGroupID + '" ' + iChecked + ' /><label for="Group_' + iGroupID + '">' + iGroupName + '</label>'); 
     }); 
     GroupsList.buttonsetv(); 
    }, 
    error: 
     function (jqXHR, textStatus, errorThrown) { errorBox.append(jqXHR.responseText); } 
}); 
} 

されませ-いいえ。私はちょうどそれらを比較する方法で、各Ajax呼び出しによって返されるデータの2つのオブジェクトにアクセスする他の方法を知りません。

+0

私は最初のものの成功の別のajax呼び出しがどのように問題であるかを見ていませんか?どのようなエラーがありますか? – RTulley

+0

@RTully私はEmployeeGroupsが「未定義」として返ってきていましたが、GetGroupsPerEmployee ajax呼び出しが次のコードの残りの部分が実行される前に値を返したかどうかが関係していると思います。 – MarkieB

答えて

1

内部のajax呼び出しと 'EmployeeGroups'変数を最初のajax呼び出しから移動し、最初の変数宣言の後ろに配置してください。これは、厄介なアヤックスの開始がなくても、同じことを達成するはずです。

+0

これは、グループが無作為にロードされることはありませんが、これまでよりも優れた結果を得ているようです。私はまだ、次のコードが実行される前にajax呼び出しの1つが値を返すかどうかによって問題があると考えています。 – MarkieB

+0

ajax呼び出しで何かが返ってきていることを確認してください(確かにただちに警告を出してください)。他の呼び出しが終了する前にajaxが実行されていないことを100%確認したい場合は、一時停止文を1秒間投げて、最初の終了を待たせます。私はそれが適切にレンダリングするために私が250ミリ秒を待たなければならなかった低速のモバイルデバイスを使用するとき、私は一度バグがあったことを知っています。それがどうなるか教えてください! –

関連する問題