Если hash и order.id существуют в url, отобразить скрытые блоки

Когда клиент жмет на кнопку рассчитать в url передается order.id и hash, должно быть так:
если order.id и hash существует в url и === "step1", мы должны показать скрытые блоки

Если что в url через history.pushState({} передаю order.id и hash и собственно step1 как стринг

success: await function (data) {
  $('#overLoader').hide()
  if (data.code == 200) {
    $("#order_id").val(data.order_id);
    $("#hash").val(data.hash);
    $("#premium").html(data.premium);
    $('#premiumWrapper').show();
    $('#premium').text((i, text) => {
      const [premium] = text.split(' ');
      return `${(+premium).toLocaleString('ru-RU')}`;
    });
    history.pushState({}, '', "?productOrderId=" + data.order_id + "&hash=" + data.hash + "&step=1");
  }else{
    showError(data.error);
    $('#overLoader').hide()
  }
}
            
            
       

Блоки отображаю так по id

$("#block1").show();
$("#block2").show();
$("#block3").show();

Ответы (1 шт):

Автор решения: De.Minov

Если правильно понял вопрос то так:

Описание работы в комментариях к коду.

let search = location.search; // получаем участок ссылки, который называется seach, где передаются параметры после знака `?`
search = '?productOrderId=order_id&hash=hash&step=1'; // ВАЖНО! т.к. это код в сниппете, тут `search` будет пустым, по этому просто его подменим для демо, при использование кода это нужно будет удалить!

if(search.length > 0) { // Если `search` не пустой, то..
  let searchObj = SearchToObject(search); // Переведём его в объект
  
  // И начнём сверять
  // Если есть `productOrderId` и `hash` и `step` === 1
  if(searchObj['productOrderId']
  && searchObj['hash']
  && searchObj['step'] === '1') { // Если все три проверки успешны (true), то ..
    document.querySelector('.hidden-block').style.display = 'block'; // Показываем скрытый блок
    // ну в вашем случае
    // $("#block1, #block2, #block3").show();
  }
}


function SearchToObject(str) { // функция для перевода строку search в объект
    var obj = {};
    str = str.slice(1).split('&')
    for(var i = 0; i < str.length; i++) {
        var e = str[i];
        e = e.split('=');
        obj[e[0]] = e[1] || '';
    }
    return obj;
}
<div class="hidden-block" style="display:none">СКРЫТЫЙ БЛОК</div>

Это получается некое универсальное средство, которым можно выполнить проверку именно по location.search, это можно применить сразу после смены ссылки и когда пользователь обновит страницу или перейдёт по ссылке с этими параметрами.


Если же этого не нужно, а нужно выполнить проверку сразу после "рассчитать", то:

Сразу после

history.pushState({}, '', "?productOrderId=" + data.order_id + "&hash=" + data.hash + "&step=1");

Добавьте следующее:

if(data.order_id && data.hash) $('#block_1, #block_2, #block_3').show();

И всё.

→ Ссылка