2017-07-27 1 views
1

Ich habe ein Alfresco-Skript, die eine JSON-Antwort zurückgeben.erhalten Alfresco.util.Ajax.request response.json Daten von externer Funktion

Ich habe eine js-Funktion getWorkflowRepositoryContent() wer dieses Webskript aufrufen und die Daten in der Antwort neu abgestimmt bekommen.

Ich speichere die response.json in einem Array list.

Alles funktioniert gut für mich, aber wenn ich getWorkflowRepositoryContent() von einer anderen Funktion js aufrufen, gab es ein leeres Array zurück, wenn es ein Array zurückgeben muss, das die von webscript response empfangenen Daten enthält.

Es gibt die Funktion, wo ich die Daten aus dem Webscript zurückgeben.

Können Sie mir sagen, was ich falsch gemacht habe, oder mir sagen, wie man die Daten von dieser Funktion richtig zurückgibt.

function getWorkflowRepositoryContent(){ 
    var list=[]; 
    var workflowFilesNameAndNodeRef; 

    var test=function getWorkflowFilesList(response) 
    { 
     workflowFilesNameAndNodeRef=response.json.nodes; 
     $.each(response.json.nodes,function(index,value){ 
      list.push(value.name); 
     }); 

    } 

    Alfresco.util.Ajax.request(
    { 
     method:Alfresco.util.Ajax.GET, 
     url: Alfresco.constants.PROXY_URI + "/ALFRESCO-DIRECTORY", 
     successCallback: 
     { 
      fn:test, 
      scope:this 
     }, 
     failureCallback: 
     { 
      fn: function(response) 
      { 
       Alfresco.util.PopupManager.displayMessage({text:"Failure"}); 
      }, 
      scope: this 
     } 
    }); 
    console.log(list.length); 
    return list; 
} 

Antwort

0

Ihr getWorkflowRepositoryContent erhält asynchrone Daten, kehrt aber synchron zurück, so dass Ihr Beispiel nicht funktioniert.

Ein einfacher Weg wäre, Ihre Funktion einfach mit einem Callback-Argument aufzurufen.

function getWorkflowRepositoryContent(cb){ // pass a callback as an argument 
    var list=[]; 
    var workflowFilesNameAndNodeRef; 

    var test=function getWorkflowFilesList(response) 
    { 
     workflowFilesNameAndNodeRef=response.json.nodes; 
     console.log(response.json.nodes); 
     $.each(response.json.nodes,function(index,value){ 
      list.push(value.name); 
     }); 


     $.each(list,function(index, fileName){ 
      $('<option/>').val(fileName).html(fileName).appendTo('#saveButton'); 
      $('<option/>').val(fileName).html(fileName).appendTo('#loadButton'); 
     }); 
     cb(list); // call the callback once the work is done 
    } 

    Alfresco.util.Ajax.request(
    { 
     method:Alfresco.util.Ajax.GET, 
     url: Alfresco.constants.PROXY_URI + "/ALFRESCO-DIRECTORY", 
     successCallback: 
     { 
      fn:test, 
      scope:this 
     }, 
     failureCallback: 
     { 
      fn: function(response) 
      { 
       Alfresco.util.PopupManager.displayMessage({text:"Failure To get StarXpert Workflow content"}); 
      }, 
      scope: this 
     } 
    }); 
} 

getWorkflowRepositoryContent(function(list) { 

    console.log(list); 
}); 

Sie auch promises verwenden könnte, aber es könnte ein wenig schwieriger sein, wenn Sie nicht mit ihnen vertraut sind.

+1

Großartig. Dies funktioniert gut und elegant wie Code. Danke – nmalloul

Verwandte Themen