一部のエンティティの親と子の依存関係を収集するajax呼び出しがあります。成功関数内で、ajaxが返すもの(データ)をグローバルレベルのオブジェクトに割り当てます。
$.ajax(
{
type: "POST",
url: 'ajax_handler.php',
data: {action:'get_dependencies', relation:relation, 'jobs[]':jobs, project:project},
dataType: 'json',
async: false, //do not change
success: function(data)
{
for(var key in data)
{
if( data.hasOwnProperty(key) )
{
//Copy data object to document level existingDependency object
existingDependency[key] = data[key];
}
}
},
error: function(xhr)
{
alert('error2:'+xhr.responseText);
}
});
関数内にあるこのAJAXを2回呼び出します。1つは親用、もう1つは子供用です。この行existingDependency[key] = data[key];
がオブジェクトを再割り当てしているため、前の割り当てが失われていることがわかりました。つまり、existingDependencyオブジェクトは、['parent']プロパティと['child']プロパティの両方を一緒に保持することはできません。
これを修正するために、existingDependencyが両方のプロパティを保持するように以下の変更を行いました。
success: function(data)
{
for(var key in data)
{
if( data[key].hasOwnProperty(relation) )
{
//Copy data object to document level existingDependency object
existingDependency[key][relation] = data[key][relation];
}
}
}
しかし、これはまったく機能しません。previousDependencyオブジェクトは空です。以下のアラートは空です。
var keys = '';
for(key in existingDependency)
{
keys += key+'\n';
}
alert(keys);
existingDependency[key][relation] = data[key][relation]
この割り当てが機能しない理由はありますか?data [key] [relation]は、違いが生じる場合に配列を保持します。