Как получить доступ к значению за пределами forEach в jquery - PullRequest
0 голосов
/ 05 февраля 2019
     GetMandatoryFieldsforUser: function (data) {
        var field = [];
        $.get("api/mapping/mandatoryfield?type=USER", function (data) {
            var self = this;
            self.dt = [];
            self.firmdata = JSON.parse(data.Data);
            console.log(self.firmdata);
            self.firmdata.forEach(function (item) {
                field.push(item.DisplayName);
            })
            console.log(field)   //able to print value                          
        })
        console.log(field) // not able to print value
       return MandatoryFields.User;
    },

РЕДАКТИРОВАТЬ

 MandatoryFields = {
    User: field,        
}

мой вопрос здесь мне нужно получить доступ к значению поля вне цикла forEach. Как этого добиться с помощью jquery или javascript

РЕДАКТИРОВАТЬ

"api/mapping/mandatoryfield?type=USER" returns 

["First Name", "Last Name", "Location", "Email", "Password"],

см. Отредактированный вопрос, я хочу использовать этот массив полей внутри MandatoryFields.User, но если я его использую, его нетпоказывая значение

Ответы [ 3 ]

0 голосов
/ 05 февраля 2019

Поскольку $ .get () является асинхронным методом, вы можете использовать async / await для доступа к возвращенному значению из обратного вызова метода $ .get.

GetMandatoryFieldsforUser: async function (data) {
    var field = [];
    const returnedField = await $.get("api/mapping/mandatoryfield?type=USER", function (data) {
        var self = this;
        self.dt = [];
        self.firmdata = JSON.parse(data.Data);
        console.log(self.firmdata);
        self.firmdata.forEach(function (item) {
            field.push(item.DisplayName);
        })
        console.log(field)   //able to print value
        return field;                          
    }).promise()

    console.log(returnedField) // not able to print value

},
0 голосов
/ 05 февраля 2019

Это реализует $ .ajax:

GetMandatoryFieldsforUser: function (data) {
  var field = [];

  $.ajax({
    url: "api/mapping/mandatoryfield?type=USER"

  }).done(function(data) {
    // THIS PORTION IS EXECUTED AFTER DATA IS LOADED
    var self = this;
    self.dt = [];
    self.firmdata = JSON.parse(data.Data);
    console.log(self.firmdata);
    self.firmdata.forEach(function (item) {
      field.push(item.DisplayName);
    })
    console.log(field)

    /*
    USE return HERE!
    */
    return field; // OR SOMETHING ELSE

  })

  // THIS WON'T WORK, BECAUSE DATA IS RETRIEVED IN ASYNC!
  console.log(field) 
},
0 голосов
/ 05 февраля 2019

Вы должны использовать метод ajax в jquery.

function GetMandatoryFieldsforUser( data)
    {
         var field= [];
         var scriptUrl = "api/mapping/mandatoryfield?type=USER";
         $.ajax({
            url: scriptUrl,
            type: 'get',
            dataType: 'html',
            async: true,
            success: function(data) {
               var self = this;
               self.dt = [];
               self.firmdata = JSON.parse(data.Data);
               console.log(self.firmdata);
               self.firmdata.forEach(function (item) {
                 field.push(item.DisplayName);
               })
               console.log(field) 
            } 
         });
         return field;
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...