Трудно показать результаты после звонка AJAX - PullRequest
0 голосов
/ 05 февраля 2020

Браузер: IE 11

PlatForm: SharePoint 2016

Я пытаюсь кэшировать данные в массив при загрузке страницы, так что массив может использоваться в остальной части моего кода в целях эффективности. У меня есть 4 массива, и данные для заполнения массивов будут поступать из 4 разных списков SharePoint. Я использую jQuery для звонков по спискам и для получения данных. Я считаю, что то, как я это сделал, неверно, потому что, хотя вызовы сделаны успешно, массивы не заполняются, когда я их использую. Вот выдержка из кода:

var cacheNavData = [];
var cacheSubNavData = [];
var cacheMegaMenuData = [];
var cacheCategoryMenuData = [];

$(document).ready(function(){
  getNavData();
  getSubNavData();
  getMegaMenuData();
  getCategoryMenuData();
})

function getNavData(){
var endPointUrl = _spPageContextInfo.webAbsoluteUrl + "/_api/web/lists/getbyTitle('"+lName+"')/items";
var headers = {
    "accept":"application/json;odata=verbose"
}

$.ajax({
    url:endPointUrl,
    async:false,
    type:"GET",
    headers: headers,
    success: function success(data) {
        cacheNavData = data.d.results;
    }
});         
}

function getSubNavData(){
var endPointUrl =  _spPageContextInfo.webAbsoluteUrl + "/_api/web/lists/getbyTitle('"+lName+"')/items?$select=parentNav/URL, parentNav/URLNAME,subLink&$expand=parentNav";
var headers = {
    "accept":"application/json;odata=verbose"
}

$.ajax({
    url:endPointUrl,
    async:false,
    type:"GET",
    headers: headers,
    success: function success(data) {
        cacheSubNavData = data.d.results;
    }
});         
}

function getMegaMenuData(){
var endPointUrl = _spPageContextInfo.webAbsoluteUrl + "/_api/web/lists/getbyTitle('"+lName+"')/items";
var headers = {
    "accept":"application/json;odata=verbose"
}

$.ajax({
    url:endPointUrl,
    async:false,
    type:"GET",
    headers: headers,
    success: function success(data) {
        cacheMegaMenuData = data.d.results;
    }
});         
}

 function getCategoryMenuData(){
var endPointUrl = _spPageContextInfo.webAbsoluteUrl + "/_api/web/lists/getbyTitle('"+lName+"')/items";
var endPointUrl = "_api/web/lists/getbyTitle('"+lName+"')/items";
var headers = {
    "accept":"application/json;odata=verbose"
}

$.ajax({
    url:endPointUrl,
    async:false,
    type:"GET",
    headers: headers,
    success: function success(data) {
        cacheCategoryMenuData = data.d.results;
    }
});         
 }

  console.log(cacheNavData);
  console.log(cacheSubNavData);
  console.log(cacheMegaMenuData);
  console.log(cacheCategoryMenuData);

Теперь я знаю, что проблема в асинхронности, и я все еще пытаюсь обернуть ее вокруг. Я посмотрел на несколько проблем и объяснений на этом сайте. Я также просмотрел разные статьи и посмотрел видео, но до сих пор не до конца понял. В этой ситуации я знаю, что когда я проверяю данные в console.log (), вызов Ajax еще не вернул данные. Во всех моих чтениях я понял это. Часть, которую я не получаю - это исправление или как я могу предотвратить это. Я попробовал следующее, чтобы исправить эту проблему, но это не сработало. Может я что то не так сделал. Любая помощь приветствуется. Спасибо!

var cacheNavData = [];
var cacheSubNavData = [];
var cacheMegaMenuData = [];
var cacheCategoryMenuData = [];

    $(document).ready(function() {
        var cache1 = getData("Navigation", "cacheNavDataVar");
        var cache2 = getData("Sub Navigation", "cacheSubNavDataVar");
        var cache3 = getData("category menu", "cacheCategoryMenuDataVar");
        var cache4 = getData("Mega Menu Category", "cacheMegaMenuDataVar");

        $.when(cache1, cache2, cache3, cache4).done(function(results){
                            if(results){
                       createNavigation(cacheNavData)
                    }
        })

    });

1 Ответ

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

jquery ajax async false statement Надеюсь, что выделенная строка говорит сама за себя. Если вы вызываете несколько ajax asyn c: истинные запросы, тогда браузер открывает новый порт tcp для каждого запроса и, как только он получает ответ на любой запрос, он начинает вызывать ajax функцию успеха.

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