从外部函数获取Alfresco.util.Ajax.request response.json数据

时间:2017-07-27 15:47:11

标签: javascript ajax alfresco alfresco-webscripts

我有一个露天的webscript返回一个json响应。

我有一个js函数getWorkflowRepositoryContent()调用此webscript并在响应中重新调整数据。

我将response.json存储在数组list中。

一切正常,但是当我从另一个js函数调用getWorkflowRepositoryContent()时,它返回一个空数组,当它必须返回一个包含从webscript response收到的数据的数组时。

有一个函数可以返回从webscript收到的数据。

你能告诉我我犯了什么错误,或告诉我如何正确地从该功能返回数据。

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;
}  

1 个答案:

答案 0 :(得分:0)

您的getWorkflowRepositoryContent正在获取异步数据但同步返回,因此您的示例无法正常工作。

一种简单的方法是使用回调参数简单地调用函数。

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);
});

您也可以使用promises但如果您不熟悉它们可能会有点困难。