Javascript 导致在AJAX成功后不设置ID的匿名函数
我正在匿名函数中进行AJAX调用。当成功回调发生时,我就可以设置自定义JS对象ID和从数据服务器收到的其他重要信息 在我将a.target.id设置为返回的data.id之后,一切看起来都很好 在我调用一个函数来处理新更新的自定义JS对象的步骤中,我刚刚用服务器的响应数据更新了这个对象。我将该对象的父对象传递给该方法,以便对该对象的所有子对象执行一些工作 但是,正如您在快照照片的最后一个示例中所看到的,a.target.parent.children[0].id不在集合中,并且/或者它的id从未设置过 在使用匿名函数时,我必须在AJAX调用期间丢失对该对象的引用Javascript 导致在AJAX成功后不设置ID的匿名函数,javascript,ajax,anonymous-function,Javascript,Ajax,Anonymous Function,我正在匿名函数中进行AJAX调用。当成功回调发生时,我就可以设置自定义JS对象ID和从数据服务器收到的其他重要信息 在我将a.target.id设置为返回的data.id之后,一切看起来都很好 在我调用一个函数来处理新更新的自定义JS对象的步骤中,我刚刚用服务器的响应数据更新了这个对象。我将该对象的父对象传递给该方法,以便对该对象的所有子对象执行一些工作 但是,正如您在快照照片的最后一个示例中所看到的,a.target.parent.children[0].id不在集合中,并且/或者它的id从未
var horizontalPositioner = function (horizontals) {
var hpa = ['?horPositions='];
for (var i = 0; i < horizontals.children.length; i += 1) {
hpa.push(horizontals.children[i].id + ':' + horizontals.children[i].position + ',');
};
hpa[i] = hpa[i].replace(',', '');
dataBase.update(dbPart('horizontal' + hpa.join('')));
};
this.subscribe.call(this, e.horizontaladded, function (a, fn) {
//
if (!a.extra.owner.id) {
return;
};
(function (a) {
dataBase.insert(
dbPart(
['horizontal?a=', a.extra.owner.instanceName, '&id=', a.extra.owner.id].join(''),
a.target
),
dbCB(
function (data, status) {
if (status === 'error') { return; };
a.target.id = data.id,
a.target.HTML().addClass('alum_' + data.id),
a.target.finish.id = data.finishID,
a.target.size.id = data.sizeID,
a.target.siteLine.id = data.sitelineID;
//
//reposition horizontals
// setTimeout(function () { horizontalPositioner(a.target.parent); }, 1000);
debugger
horizontalPositioner(a.target.parent);
if (fn) { processCallbacks(data, status, fn); };
//very last
events.publishDatabaseCallbacks(e.horizontaladded,
eArgs(a.bay, { data: data, instanceName: 'horizontal', ownerid: a.extra.owner.id, id: data.id }));
},
function (xhr, status, errorThrown) { console.log('ERROR adding horizontal'); })
);
}(a));
}, true);
下面是所有的代码。我怎么会丢失参考资料?或者,当AJAX调用返回时,如何维护对该父级的子级的引用
我以前从未遇到过这种情况,这让我相信它与匿名函数有关
var horizontalPositioner = function (horizontals) {
var hpa = ['?horPositions='];
for (var i = 0; i < horizontals.children.length; i += 1) {
hpa.push(horizontals.children[i].id + ':' + horizontals.children[i].position + ',');
};
hpa[i] = hpa[i].replace(',', '');
dataBase.update(dbPart('horizontal' + hpa.join('')));
};
this.subscribe.call(this, e.horizontaladded, function (a, fn) {
//
if (!a.extra.owner.id) {
return;
};
(function (a) {
dataBase.insert(
dbPart(
['horizontal?a=', a.extra.owner.instanceName, '&id=', a.extra.owner.id].join(''),
a.target
),
dbCB(
function (data, status) {
if (status === 'error') { return; };
a.target.id = data.id,
a.target.HTML().addClass('alum_' + data.id),
a.target.finish.id = data.finishID,
a.target.size.id = data.sizeID,
a.target.siteLine.id = data.sitelineID;
//
//reposition horizontals
// setTimeout(function () { horizontalPositioner(a.target.parent); }, 1000);
debugger
horizontalPositioner(a.target.parent);
if (fn) { processCallbacks(data, status, fn); };
//very last
events.publishDatabaseCallbacks(e.horizontaladded,
eArgs(a.bay, { data: data, instanceName: 'horizontal', ownerid: a.extra.owner.id, id: data.id }));
},
function (xhr, status, errorThrown) { console.log('ERROR adding horizontal'); })
);
}(a));
}, true);
var水平定位器=功能(水平){
var hpa=['?horPositions='];
对于(变量i=0;i
我添加了一个带有嵌套setTimeout的匿名函数,为构建所有内容提供了时间。我有许多事件同时发生,所以现在这是可行的
var horizontalPositioner = function (horizontals) {
(function (hors) {
setTimeout(function () {
var hpa = ['?horPositions='];
for (var i = 0; i < hors.children.length; i += 1) {
hpa.push(hors.children[i].id + ':' + (hors.children[i].position ? hors.children[i].position : 1) + ',');
};
hpa[i] = hpa[i].replace(',', '');
dataBase.update(dbPart('horizontal' + hpa.join('')));
}, 1000);
}(horizontals));
};
var水平定位器=功能(水平){
(功能(hors){
setTimeout(函数(){
var hpa=['?horPositions='];
对于(变量i=0;i
不看a.target
?