如何在循环中和某些代码之前执行ajax请求

时间:2014-02-14 07:20:04

标签: javascript ajax alfresco

有没有办法在某些代码之前执行alfresco ajax请求successCallback。 我不能把代码放在successCallback中,这是它的样子。

do{var serviceUrl = "/share/proxy/alfresco/slingshot/search?" + newSRequest;
        Alfresco.util.Ajax.request({
            url: serviceUrl,
            successCallback:{
                fn: function(response){

                    var items = response.json.items;

                    for (var i = 0 ; i < items.length ; i++){
                        var nodeRef = items[i].nodeRef;

                        if (_this.nodeRefParameter.length > 0){
                            _this.nodeRefParameter += ",";
                        }
                        _this.nodeRefParameter += nodeRef;
                    }
                },
                scope: this
            },
            failureMessage: "Erreur Technique - Impossible d'executer le service: '" + serviceUrl + "'",
            execScripts: true
        });

        i++;
    } while( i * NB_RESULTS_PER_PAGE < (this.totalRecords < MAX_RESULTS_EXPORTED ? this.totalRecords : MAX_RESULTS_EXPORTED) );

    var inputHiddenNodeRefs = document.getElementById("nodeRefs");
    inputHiddenNodeRefs.setAttribute("value", _this.nodeRefParameter);

    var formulaire = document.getElementById("formExportSearchResults");
    formulaire.submit();

1 个答案:

答案 0 :(得分:0)

在do-while循环中触发XHR调用的方法通常是一种非常“脏”的方法。因此,根据您的使用情况,有更好的设计方法,例如连接自己的WebScript,只调用一次。 请记住,XHR响应是异步处理的,因此您无法确定您的回调是否与触发XHR调用的方式相同。

如果涉及JavaScript&amp;链接然后承诺/期货是要走的路。不幸的是,Alfresco使用了一个非常古老的YUI版本,承诺不是内置的,但你可以自己添加一个promises-lib,例如:https://github.com/kriskowal/q

也许,您应该更详细地描述您的用例/需求,尤其是关于您要查找的nodeRef的角色。最好添加一个Alfresco FormFilter并在提交表单时在repo中执行...