代码之家  ›  专栏  ›  技术社区  ›  nmalloul

获取Alfresco.util.Ajax。请求-响应。来自外部函数的json数据

  •  1
  • nmalloul  · 技术社区  · 7 年前

    我有一个alfresco webscript,它返回json响应。

    我有一个js函数 getWorkflowRepositoryContent() 谁调用此webscript并在响应中返回数据。

    我存储 response.json 在阵列中 list

    对我来说一切都很好,但当我打电话时 当它必须返回包含从webscript接收的数据的数组时,它从另一个js函数返回一个空数组 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 回复  |  直到 7 年前
        1
  •  0
  •   Axnyff    7 年前

    您的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 但如果你不熟悉它们,可能会有点困难。