gpt4 book ai didi

javascript - 匿名函数导致在 AJAX 成功后不设置 id

转载 作者:行者123 更新时间:2023-11-30 06:31:00 26 4
gpt4 key购买 nike

我正在匿名函数中进行 AJAX 调用。当成功回调发生时,我就可以设置我的自定义 JS 对象 ID 和其他从数据服务器收到的重要信息。

在我将 a.target.id 设置为返回的 data.id 之后一切正常。

在我调用一个函数来处理新更新的自定义 JS 对象的步骤中,我刚刚使用来自服务器的响应数据进行了更新。我将该对象的父对象传递给方法,以对该对象的所有子对象执行一些操作。

但是,正如您在快照照片中的最后一个示例中看到的,a.target.parent.children[0].id 不在集合中和/或它的 ID 从未设置过。

我一定是在使用匿名函数时在 AJAX 调用期间丢失了对该对象的引用。

这是所有的代码。我怎么会失去引用?或者,当 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);

Snap shot of the three steps

最佳答案

我添加了一个带有嵌套 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));
};

关于javascript - 匿名函数导致在 AJAX 成功后不设置 id,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17665819/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com