Получить данные Alfresco.util.Ajax.request response.json из внешней функции
У меня есть сценарий на открытом воздухе, который возвращает ответ JSON.
У меня есть функция JS getWorkflowRepositoryContent()
кто вызывает этот webscript и возвращает данные в ответ.
Я храню response.json
в массиве list
,
У меня все отлично работает, но когда я звоню getWorkflowRepositoryContent()
из другой функции js он возвращает пустой массив, когда должен вернуть массив, содержащий данные, полученные из 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 ответ
Ваш 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);
});
Вы также можете использовать обещания, но это может быть немного сложнее, если вы не знакомы с ними.