Javascript Function call with parameter

0

I need to call a Javascript function where one of its parameters is a function. In this case, how do I pass parameters within the function call?
Ex: (Function that will be called first:

function getWS(data, success) {
    $.ajax({
        type: 'GET',
        url: 'MinhaUrl',
        data: data,
        async: false,
        crossDomain: true,
        dataType: 'json',
        success: success,
        error: error,
    });
}

Function in case of success in the above call:

function preencheLista(data, lista)
{
    $.each(data, function (i, item) {
        lista.push({ "id": item.id, "nome": item.nome })
    });
}

Call:

//Aqui que está minha dúvida. Como passar data e marcas para esta função)
var marcas = [];
getWS(data, preencheLista(data, marcas));
    
asked by anonymous 30.07.2017 / 21:26

1 answer

1

For this purpose you can use the $.proxy() function of jquery!
This function gets a function and returns a new one that will always have a particular context.

To be more concrete see the example of your code working in jsfiddle

var url = 'https://jsonplaceholder.typicode.com/posts';

var getWS = function(data, success) {
  $.ajax({
    type: 'GET',
    url: url,
    data: data,
    //async: false, //deprecado
    crossDomain: true,
    dataType: 'json',
    success: success,
    //error: error,
  });
}

var preencheLista = function(data, lista) {
  $.each(data, function(i, item) {
    lista.push({
      "id": item.id,
      "nome": item.title
    }) // alterado item.nome para item.title pois o objecto de retorno nao possui o atributo nome
  });
}

var marcas = [];

getWS({}, $.proxy(function(data) {
  preencheLista(data, marcas);
  
  //adiciona o resultdado a lista no html para visualização
  $(marcas).each(function(i, item) {
    $("ul").append('<li>${item.id} - ${item.nome}</li>')
  });
  
}));
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<ul>
  <!-- Esapaco reservado para listagem do resultado-->
</ul>
    
30.07.2017 / 22:13