Используйте извлеченные данные из запроса ajax, который существует в другом файле, затем используйте в локальной функции - PullRequest
0 голосов
/ 26 сентября 2018

Действительно надеюсь, что кто-то может указать мне в правильном направлении или сказать мне, что я делаю неправильно.Извините, если мое объяснение не велико, будьте добры!

В настоящее время я работаю над созданием функции, которая выполняет вызов ajax с динамически создаваемым URL.Функция должна находиться в одном месте (например, website.com/global-api.js).В идеале любой из наших разработчиков должен иметь возможность вызывать функцию из своих сайтов (website.com/mysite.html) с набором данных, который они хотят получить в качестве аргумента, и затем изменять его по мере необходимости (яЯ включил неопределенную диаграмму, которая была создана для описания требования - может быть бесполезно).

global-api.js

function globalApi(value){
    var setApiProp = {
        settings: { name: value },
        init: function(){ 'use strict';
            s=this.settings;
            this.getApiData(s.name);
        },
        getApiData: function(attr){
            path = '/api/'+attr;
            console.log('Get from: ' + path)

            var jqxhr = $.ajax({
                url: path,
                method: "GET",
                dataType: "json",
                async: false
            })
            .done(function(responseData){
                console.log('Response is: ' + responseData)
                // Log: Response is: [object Object],[object Object]..
                return responseData
            })
        }
    }; //end
    setApiProp.init()
}

unitone.js

Внутри события, загруженного содержимым dom:

var retrievedData = globalApi("news/")
console.log('Retrieved is: ' + retrievedData)
developersFunction(retrievedData);

Вызов из unitone.js генерирует правильный путь и получает правильные данные в globalApi.Тем не менее, мой журнал в настоящее время;

Response is: [object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Retrieved is: undefined
Developer function data is: undefined

Мой вопрос;Есть ли надежный способ заставить developersFunction ждать, пока не будет задан retrievedData, чтобы его можно было использовать в локальных функциях?

Диаграмма требований: файлы модулей для вызова функции из центрального местоположения

1 Ответ

0 голосов
/ 26 сентября 2018

Что вам нужно сделать, это передать функцию обратного вызова в функцию gloablAPI, как показано ниже:

function globalApi(value, callBack)

Тот, кто вызывает эту функцию, пропустит функцию, в вашем случае вы можете передать developersFunction:

globalApi("news/", developersFunction)

Теперь в стороне от вашей функции globalAPI при получении ответа вам нужно вызвать эту функцию:

.done(function(responseData){
                console.log('Response is: ' + responseData)
                // Log: Response is: [object Object],[object Object]..
                callBack(response);
  })

Таким образом, ваша функция будет выполняться только после получения ответа отAPI.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...