Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/451.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 导致在AJAX成功后不设置ID的匿名函数_Javascript_Ajax_Anonymous Function - Fatal编程技术网

Javascript 导致在AJAX成功后不设置ID的匿名函数

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从未

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

在我将a.target.id设置为返回的data.id之后,一切看起来都很好

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

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

在使用匿名函数时,我必须在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);
下面是所有的代码。我怎么会丢失参考资料?或者,当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