2014-02-14 31 views
0

有沒有辦法在某些代碼之前執行alfresco ajax請求successCallback。 我不能把代碼放在successCallback中,下面是它的樣子。如何在循環中執行ajax請求,並在某些代碼之前

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(); 
+0

嘗試使用beforeSend:function(){... code ...}就在url之後:serviceUrl, –

+0

@mt其實代碼有點複雜。在每個循環迭代中都有一個更新變量nodeRefParameter的ajax請求。這個變量的最終值與表單一起提交。問題在於它在被ajax請求序列更新之前被提交。 successCallback函數在所有其他代碼之後執行。 – user2554076

+0

@ m-t此外,beforeSend處理程序允許在successCallback之前或之後執行代碼?我需要在執行代碼之後。 – user2554076

回答

0

您在do-while循環中觸發XHR調用的方法通常是非常「骯髒」的方法。因此,根據您的使用情況,有更好的設計方法,例如連接你自己的WebScript,只調用一次。 請務必記住XHR響應是異步處理的,因此您不能確定您的回調是否以與您的XHR呼叫已觸發相同的方式執行。

如果說到JavaScript &鏈接,那麼promises/futures是要走的路。不幸的是,露天使用一個很老的銳版均承諾不建,但你可以在你自己的,例如增加一個承諾-lib目錄下:https://github.com/kriskowal/q

也許,你應該更詳細地描述你的使用情況/要求,尤其是關於您想要查找的nodeRef的作用。在表單提交時添加一個Alfresco FormFilter並在回購中執行它可能會更好...

+0

Thx回覆。畢竟我做的是使用遞歸Ajax調用。我不知道這是否是最佳做法,但它工作正常。 – user2554076

相關問題