Jak przesłać dane zwrócone ajax z jednej funkcji do innej funkcji ?

0

Pierwsza funkcja:

function getGroupsByIdUser(id){

      var requestUrl = apiRoot +'users';
      $.ajax({
          url: requestUrl+'/?'+$.param({
              id:id
          }),
          method:"GET",
          contentType: 'application/json',
          success:function (data) {
            return data
          }
      })

  }

Druga funkcja:

function handleUserUpdateRequest() {

    var parentEl = $(this).parent().parent();
    var userId = parentEl.attr('data-user-id');
    var userFirstName = parentEl.find('[data-user-firstName-input]').val();
    var userLastName = parentEl.find('[data-user-lastName-input]').val();
	var userPassword = parentEl.find('[data-user-password-input]').val();
	var userBirthdate = parentEl.find('[data-user-birthDate-input]').val();
    var uuserGroups = getGroupsByIdUser(userId );

    var requestUrl = apiRoot + 'users';

    $.ajax({
      url: requestUrl,
      method: "PUT",
      processData: false,
      contentType: "application/json; charset=utf-8",
      dataType: 'json',
      data: JSON.stringify({
		  id:userId,
        firstName: userFirstName,
        lastName: userLastName,
        password: userPassword,
		birthDate: userBirthdate,
          groupOfUserDtos:userGroups
      }),
      success: function(data) {
        parentEl.attr('data-user-id', data.id).toggleClass('datatable__row--editing');
        parentEl.find('[data-user-firstName-paragraph]').text(userFirstName);
        parentEl.find('[data-user-lastName-paragraph]').text(userLastName);
		parentEl.find('[data-user-password-paragraph]').text(userPassword);
		parentEl.find('[data-user-birthDate-paragraph]').text(userBirthdate);
      }
    });

  }

Słabo znam ajax i jquery dopiero zaczynam naukę. Jeżeli wstawię pierwszą funkcje do drugie do zmiennej var userGroups to ona jest cały czas null. Jak rozwiązać ten problem z góry za pomoc dziękuje.

0

Poczytaj o callbackach i Promise.

0
function getGroupsByIdUser(id) {
      return new Promise(function (resolve, reject) {
          var requestUrl = apiRoot + 'users';
          $.ajax({
              url: requestUrl + '/?' + $.param({
                  id: id
              }),
              method: "GET",
              contentType: 'application/json',
              success: function (data) {
                  return resolve(console.log(data));
              },
              error: function () {
                  reject("Error");
              }
          })
      })

  }
function handleUserUpdateRequest(callback) {

    var parentEl = $(this).parent().parent();
    var userId = parentEl.attr('data-user-id');
    var userFirstName = parentEl.find('[data-user-firstName-input]').val();
    var userLastName = parentEl.find('[data-user-lastName-input]').val();
	var userPassword = parentEl.find('[data-user-password-input]').val();
	var userBirthdate = parentEl.find('[data-user-birthDate-input]').val();
    var userGroups = console.log(callback(userId));


    var requestUrl = apiRoot + 'users';
    $.ajax({
      url: requestUrl,
      method: "PUT",
      processData: false,
      contentType: "application/json; charset=utf-8",
      dataType: 'json',
      data: JSON.stringify({
		  id:userId,
        firstName: userFirstName,
        lastName: userLastName,
        password: userPassword,
		birthDate: userBirthdate,
          groupOfUserDtos:userGroups
      }),
      success: function(data) {
        parentEl.attr('data-user-id', data.id).toggleClass('datatable__row--editing');
        parentEl.find('[data-user-firstName-paragraph]').text(userFirstName);
        parentEl.find('[data-user-lastName-paragraph]').text(userLastName);
		parentEl.find('[data-user-password-paragraph]').text(userPassword);
		parentEl.find('[data-user-birthDate-paragraph]').text(userBirthdate);
      }
    });

  }
$usersContainer.on('click','[data-user-submit-update-button]',function (){handleUserUpdateRequest(getGroupsByIdUser())});

Zrobiłem to tak wyrzuca mi błędy:
script.js:206 Uncaught TypeError: callback is not a function
at handleUserUpdateRequest (script.js:206)
at HTMLButtonElement.<anonymous> (script.js:345)
at HTMLDivElement.dispatch (jquery.js:5183)
at HTMLDivElement.y.handle (jquery.js:4991)
handleUserUpdateRequest @ script.js:206
(anonymous) @ script.js:345
dispatch @ jquery.js:5183
y.handle @ jquery.js:4991
jquery.js:9600 GET http://localhost:8080/v1/users/?id= 500 ()
send @ jquery.js:9600
ajax @ jquery.js:9206
(anonymous) @ script.js:180
getGroupsByIdUser @ script.js:178
(anonymous) @ script.js:345
dispatch @ jquery.js:5183
y.handle @ jquery.js:4991
script.js:190 Uncaught (in promise) Error

0

Nie mieszaj callbacków z Promise'ami - zwłaszcza nie rozumiejąc jak działają ;-)

Aktualnie masz:

handleUserUpdateRequest(getGroupsByIdUser())

A powinno być:

getGroupsByIdUser().then((costam) =>
  handleUserUpdateRequest(costam);
});
0

Uczę się próbuję to jakoś praktycznie zrozumieć.. W funkcji getGroupsByIdUser(id) jest parametr, który jest pobierany z tej drugiej funkcji. Jak to rozwiązać beż dodatkowego kobinowania .

0

W jaki sposób jest pobierany z drugiej funkcji?

0

var userId = parentEl.attr('data-user-id');
var userGroups = console.log(callback(userId));

0

Niestety nie rozumiem, co chcesz przekazać.
Prawdopodobnie opis słowny sprawdzi się lepiej.

0

Funkcja handleUserUpdateRequest(callback) zawiera zmienną var userId = parentEl.attr('data-user-id'), które jest id , które jest parametrem w tej drugiej funkcji getGroupsByIdUser(id)

0

Czej - nie rozumiem, co próbujesz osiągnąć.
Opisz może jak to ma wyglądać z poziomu użytkownika, a nie kodu.

0

Dane pobrane z tej funkcji getGroupsByIdUser(id) (Tablica z obiektami Group) Chce wstawić do tej drugiej funkcji do zmiennej groupOfUserDtos. przy wysyłani przez Ajax. W innych językach wystarczy to przepisać do zmiennej. W javascripcie trzeba używać callback lub promise jak mi podpowiedziałeś wcześniej. Tylko ja mam problem teraz z tym parametrem..
W tej funkcji

function getGroupsByIdUser(id) {
      return new Promise(function (resolve, reject) {
          var requestUrl = apiRoot + 'users';
          $.ajax({
              url: requestUrl + '/?' + $.param({
                  id: id
              }),
              method: "GET",
              contentType: 'application/json',
              success: function (data) {
                  return resolve(console.log(data));
              }

          })
      })

  }
``` Parametr id podany w funkcji nie chce się podstawiać za parametr id url. Jak to zmodyfikować ?
0
function getGroupsByIdUser(id){

      var requestUrl = apiRoot +'users';
      return $.ajax({
          url: requestUrl+'/?'+$.param({
              id:id
          }),
          method:"GET",
          contentType: 'application/json'
      })

  }
async function handleUserUpdateRequest() {

    var parentEl = $(this).parent().parent();
    var userId = parentEl.attr('data-user-id');
    var userFirstName = parentEl.find('[data-user-firstName-input]').val();
    var userLastName = parentEl.find('[data-user-lastName-input]').val();
    var userPassword = parentEl.find('[data-user-password-input]').val();
    var userBirthdate = parentEl.find('[data-user-birthDate-input]').val();
    var uuserGroups = await getGroupsByIdUser(userId );

    var requestUrl = apiRoot + 'users';

    await $.ajax({
      url: requestUrl,
      method: "PUT",
      processData: false,
      contentType: "application/json; charset=utf-8",
      dataType: 'json',
      data: JSON.stringify({
          id:userId,
        firstName: userFirstName,
        lastName: userLastName,
        password: userPassword,
        birthDate: userBirthdate,
          groupOfUserDtos:userGroups
      }),
      success: function(data) {
        parentEl.attr('data-user-id', data.id).toggleClass('datatable__row--editing');
        parentEl.find('[data-user-firstName-paragraph]').text(userFirstName);
        parentEl.find('[data-user-lastName-paragraph]').text(userLastName);
        parentEl.find('[data-user-password-paragraph]').text(userPassword);
        parentEl.find('[data-user-birthDate-paragraph]').text(userBirthdate);
      }
    });

  }

To tak na szybko.

1 użytkowników online, w tym zalogowanych: 0, gości: 1