Jump to content
  • 0

Хранение данных на html-странице для xhr


alex_web64
 Share

Question

Здравствуйте.

Мне нужно на странице сохранить некоторые данные, чтобы в будущем подгрузить их  помощью xhr. Каким образом это лучше сделать в плане производительности? Создать скрытый div  с data-* параметрами, или есть лучшее решение?

Link to comment
Share on other sites

7 answers to this question

Recommended Posts

  • 0

Вы не поняли вопроса.

Например, пользователь заходит на сайт site.ru, и нужно ему вывести некую информацию, которая хранится на странице site.ru/page2.html. Я создаю XMLHttpRequest на ту страницу и делаю поиск по dom'у c указанием id тега, в котором хранится  нужная мне информация. Вопрос в том, как достичь максимального быстродействия.

Хранить все в скрытом теге - нужно делать медленный поиск по dom'у и искать этот элемент. Можно было бы все записать в data-* атрибуте для тега body, но я читал, что некоторые браузеры возвращают только контент, который находится между <body>...</body>. Какие есть еще варианты?

Link to comment
Share on other sites

  • 0
22 минуты назад, wwt сказал:

делать запрос к html файлу и брать оттуда данные? о_О А что мешает хранить данные в базе данных на сервере к примеру?

Нет такой возможности. Есть доступ только к html-коду.

Link to comment
Share on other sites

  • 0

Если нет возможности использовать бд, то почему бы не хранить данные в простом .json или .js файле? И получать-читать их соответственно так, к примеру: http://api.jquery.com/jquery.getjson/
> Можно было бы все записать в data-* атрибуте
И в чём проблема?- запишите, вроде как все браузеры тысячу лет как его понимают: http://caniuse.com/#feat=dataset

Но первый вариант с файлом данных предпочтительней. Удачи:)

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

  • Similar Content

    • By ioprst
      Привет. Проблема в следующем. Есть одна страничка, на которой две вкладки, на второй вкладке исполняется js. В firefox'e все как надо, запускаю localhost и на какой-бы вкладке изначально я не оказался, анимация svg (js выполняет) работает, после перехода с 2ой вкладки на первую и обратно, анимация также работает. Что происходит в Хроме: Если я запускаю страницу (перезапускаю) и оказываюсь на второй вкладке, то анимация есть, стоит перейти с 2ой вкладки на 1ю и обратно, анимация пропадает. Суть в том, что в хроме при любом переходе между вкладками js перестает работать, либо проблема в XMLHttpRequest. Привожу js код, который исполняется на второй вкладке:
      var svgDoc; var xhr; var c1_boolFlow = false; window.onload = function() { svgDoc = document.getElementById("cns2Id").contentDocument; var timer = setInterval(anim, 100); var timerPost = setInterval(setPost, 100); } function anim() { c1anim(); } // Функция отправки запроса function setPost() { xhr = new XMLHttpRequest(); var send = ["c1_boolFlow"]; xhr.open("POST", 'cgi-bin/getVars.py', true); xhr.setRequestHeader('Content-type', 'application/json; charset=utf-8') xhr.onreadystatechange = onResponse; xhr.send(send); } // Функция обработки ответа function onResponse() { if (xhr.readyState != 4) { return; } var respJSON = JSON.parse(xhr.responseText); c1_boolFlow = respJSON.c1_boolFlow; } ...  
    • By Alexys
      Запрос данных с сервера с использованием JQuery-Аякс запроса (ajax) Код на js следующий:jQuery.ajax({            type: "POST",            url: Url.Action("GetMyList", "ServerController"),            contentType: "application/json; charset=utf-8",            dataType: "json",            data: JSON.stringify({}),            success: function(data){},            error: function(data){}});На серверной стороне:
      1. Если метод без параметра, то:
      public class ServerController : Controller{[HttpPost]public NJsonResult GetReportPeriodList(){try{var list = MySqlAdapter.GetList();return new NJsonResult { Data = list };}catch (Exception e){return new NJsonResult{Data = new{error = true,msg = "Ошибка получения списка."}};}}}Возникает ошибка в IE (10 версия), в консоли (в дебаггере js (в метод error: function(data){}) возвращается структура, и в одном поле просто "error"): SCRIPT7002: XMLHttpRequest: Network Error 0x2efe, Could not complete the operation due to error 00002efe.Хром отрабатывает успешно!В итоге нет результата! 
      2. Если же в метод добавим параметр:
      public class ServerController : Controller{[HttpPost]public NJsonResult GetReportPeriodList(string code){try{var list = MySqlAdapter.GetList();return new NJsonResult { Data = list };}catch (Exception e){return new NJsonResult{Data = new{error = true,msg = "Ошибка получения списка."}};}}}То Всё проходит в IE успешно!!! Как так?
       
      Подскажите как быть? Как использовать методы без параметров. Получить просто какое-либо значение, массив объектов, данные.
       
       
       
        
       
  • Обсуждения

    • Случайно вспомнил этот форум, зашёл, а тут как раз ностальгируют)
    • Не кажется, ее просто нет походу... очень жаль.
    • Рад видеть всех. Но к сожалению мне кажется активность сильно упала 😞
    • html:   <td> <span class="qty-minus" onclick="qtyMinus(); return false;" data-id="<?=$id;?>" data-qty="<?= $item['qty'];?>" data-weight="<?=$item['weight'];?>"> <i class="bi bi-dash-circle-fill text-success"></i> </span> <span class="qty"><?= $item['qty'];?></span> <span class="qty-plus" onclick="qtyPlus(); return false;" data-id="<?=$id;?>" data-qty="<?= $item['qty'];?>" data-weight="<?=$item['weight'];?>"> <i class="bi bi-plus-circle-fill text-success"></i> </span> </td> js:   // Изменение количества товара в заказа - плюс function qtyPlus() { $('.qty-plus').on('click', function(){ let str = $(this).data('id'); if(typeof str === 'string'){ let id_arr = str.split('-'), id = id_arr[0], mod = id_arr[1], qty_update = $(this).data('qty')+1, weight = $(this).data('weight'); $.ajax({ url: '/cart/add', data: {id: id, qty_update: qty_update, mod: mod, weight:weight}, type: 'GET', success: function(res){ showCart(res); }, error: function(){ alert('Ошибка! Попробуйте позже'); } }); }else if(!Number.isNaN(str)){ let id = $(this).data('id'), mod = null, qty_update = $(this).data('qty')+1, weight = $(this).data('weight'); $.ajax({ url: '/cart/add', data: {id: id, qty_update: qty_update, mod: mod, weight:weight}, type: 'GET', success: function(res){ showCart(res); }, error: function(){ alert('Ошибка! Попробуйте позже'); } }); } }); return true; } // Изменение количества товара в заказа - минус function qtyMinus() { $('.qty-minus').on('click', function(){ let str = $(this).data('id'); if(typeof str === 'string'){ let id_arr = str.split('-'), id = id_arr[0], mod = id_arr[1], qty_update = $(this).data('qty')-1, weight = $(this).data('weight'); $.ajax({ url: '/cart/add', data: {id: id, qty_update: qty_update, mod: mod, weight:weight}, type: 'GET', success: function(res){ showCart(res); }, error: function(){ alert('Ошибка! Попробуйте позже'); } }); }else if(!Number.isNaN(str)){ let id = $(this).data('id'), mod = null, qty_update = $(this).data('qty')-1, weight = $(this).data('weight'); $.ajax({ url: '/cart/add', data: {id: id, qty_update: qty_update, mod: mod, weight:weight}, type: 'GET', success: function(res){ showCart(res); }, error: function(){ alert('Ошибка! Попробуйте позже'); } }); } }); return true; } Суть в том, что клик срабатывает только со второго раза... Почему? Страница: https://shop-site.su/category/men Нужно положить товар в корзину и либо в модальном окне, либо перейти на страницу оформления заказа (а лучше и там и там покликать) и покликать на плюс и минус кол-ва товара. Решил проблему: убрал из html вызов функции onclick="qtyMinus(); return false;" а js переделал вот так: $('body').on('click', '.qty-minus', function(){...}); Но вот ответ на вопрос почему, все же хотелось бы знать.
    • Салют Россияне! Тоже давненько не был тут... Многие "выросли" в крутышек наверное, а кому-то просто некогда. Я пока не знаю, но может буду заглядывать сюда - ностальжи :)
×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy