Лично я не добавляю узлы и ребра отдельно, вы можете использовать массив для сохранения узлов и ребер, которые вы хотите добавить, а затем вызвать cy.add ():
var array = [];
// do your ajax calls
success: function(data) {
$.each(data['kids'], function(i, value) {
array.push({
group: 'nodes',
data: { id: value['id'] },
position: value['position']
});
})
}
// add all edges
array.push({
group: 'edges', data: { id: 'e0', source: 'n0', target: 'n1' }
});
cy.add(array);
В качестве альтернативыВы можете попытаться использовать cy.ready (), чтобы дождаться фактического добавления узлов, в противном случае может случиться так, что идентификаторы не найдены:
cy.ready(function () {
cy.add({
group: 'edges', data: { id: 'e0', source: 'n0', target: 'n1' }
});
});
Редактировать: Вы вызываете cy.add () для ребер внутри или снаружи вызова ajax?Ajax - это вызов асинхронной функции, поэтому весь код после вызова вне функции success, вероятно, будет выполнен до того, как вы успешно выполните то, что написали.Если вы хотите, вы можете подождать, пока он заработает, и поместить второй cy.add () для ребер в обработчик обещаний, как здесь:
https://blog.revathskumar.com/2016/06/why-i-prefer-ajax-promise.html