2016-09-16 3 views
0

Я пытаюсь отлаживать скрипт на сайте WordPress, что позволяет динамически фильтровать списки заданий (через Jobvite.) Когда страница изначально загружается без какого-либо URL-адреса прикрепленные параметры - например site.com/jobs/all-positions - фильтры работают нормально; однако, когда страница загружена/перезагружена с прилагаемыми параметрами - например. site.com/jobs/all-positions#country=united-states&city=minneapolis, фильтры не работают на всех, и я вижу следующее сообщение об ошибке JQuery в консоли:Настройка состояния страницы из хеша URL-адреса - синтаксическая ошибка (jQuery)

Синтаксис ошибка, непризнанное выражение: #country%3Dunited-states%26city%3Dminneapolis

Кажется, что компоненты URI не являются правильно закодированы, и мне интересно, если есть ошибка я не вижу в сценарии плагин, который обрабатывает фильтрации, которые я в том числе ниже (?):

// Update Filter hash 
    function updateFilterHash() { 
    var filterHash = '#'; 

    if (selectedCountryFilters.length !== 0) { 
     filterHash += "country=" + selectedCountryFilters.join(",") + "&"; 
    } 
    if (selectedCityFilters.length !== 0) { 
     filterHash += "city=" + selectedCityFilters.join(",") + "&"; 
    } 
    if (selectedCategoryFilters.length !== 0) { 
     filterHash += "category=" + selectedCategoryFilters.join(",") + "&"; 
    } 

    console.log(filterHash); 

    $.History.go(filterHash); 
    } 

    // Set page state from URL hash 
    if (location.hash.length !== 0) { 

    // Set Req detail view 
    if (location.hash.indexOf("#req-") !== -1) { 
     var reqId = encodeURIComponent(location.hash.slice(1)); 
     $(".all-requisitions").hide(); 
     $(".all-open-positions-title").hide(); 
     $(".breadcrumbs").append("<span> &gt; " + $("[data-id='" + reqId + "'] h1").text() + "</span>"); 
     $(".requisition-detail[data-id='" + reqId + "']").fadeIn(); 
    } 

    // Set Filters 
    if (location.hash.indexOf("&") !== -1) { 
     var hashParts = encodeURIComponent(location.hash.slice(1)).split("%26"); 

     // Activate Filters 
     for (var i = 0; i < hashParts.length; i++) { 

     if (hashParts[i] !== "") { 
      var hashPairs = hashParts[i].split("%3D"); 
       hashName = hashPairs[0], 
       hashValues = hashPairs[1].split("%2C"); 

      for (var j = 0; j < hashValues.length; j++) { 
      $("a[href='#" + hashName + "-" + hashValues[j] + "']").addClass("selected"); 

      // Update appropriate Filter arrays and perform other Filter-specific actions 
      switch (hashName) { 
       case "country": 
       selectedCountryFilters.push(hashValues[j]); 

       // If Filter is a Country, reveal the Cities too 
       updateCityFilters(); 
       break; 

       case "city": 
       selectedCityFilters.push(hashValues[j]); 

       // If Filter is a city, activate the Country too 
       var hashCountry = $("a[href='#" + hashName + "-" + hashValues[j] + "']").data("country"); 
       $("a[href='#country-" + hashCountry + "']").addClass("selected"); 
       selectedCountryFilters.push(hashCountry); 
       break; 

       case "category": 
       selectedCategoryFilters.push(hashValues[j]); 
       break; 

       default: 
       break; 
      } 

      } 

     } 
     } 

     updateReqs(); 
     updateCategoryHeadings(); 
    } 
    } 

Это только часть сценария которые обрабатывают s хэш-компоненты URI, и я думаю, что проблема должна лежать где-то здесь. Что действительно расстраивает, так это то, что страница/сценарий отлично работает на тестовом сервере (и, следовательно, на другой установке WordPress), но не на промежуточном сервере. Тем не менее, обе имеют одинаковые версии WP и загружают одни и те же версии jQuery. Есть ли идеи относительно того, почему сценарий не будет правильно анализировать компоненты URI?

+0

ошибки сообщают вам, где их бросают. Где в этом коде генерируется эта ошибка? я подозреваю, что это связано с переходом в селектора jQuery. Почему вы используете 'encodeURIComponent()' для обработки того, что исходит от URL-адреса? помогло бы, если бы вы уменьшили это до минимального представления проблемы – charlietfl

+0

спасибо за ответ @charlietfl - консольная ошибка просто перечисляет 'jquery.js? ver = 1.12.4: 2', таким образом, не сам скрипт плагина. Я сам на самом деле не писал этот скрипт, поэтому я не уверен, почему был использован 'encodeURIComponent()'. Должен ли я попытаться удалить эту функцию из переменных 'reqId' и' hashParts'? – nickpish

+1

хорошо, мне нечего кодировать, а нужно декодировать, если вы передаете это в селектора. Альтернативой может быть использование jQuery 'filter()' вместо использования селекторов. – charlietfl

ответ

1

использование? вместо #

site.com/jobs/all-positions?country=united-states&city=minneapolis 
+0

спасибо Art-- почему вы думаете,' '' не будет в ошибке? и я бы просто заменил «var filterHash = '#';» на 'var filterHash = '?';' – nickpish

+0

@nickpish hashtag - это якорный тег и всегда приходит последним в URL. указанную строку запроса. Подробнее о структуре URL: [link] (https://developer.mozilla.org/en-US/docs/Learn/Common_questions/What_is_a_URL) –

+0

Итак, вы думаете, что использование '#' в начале может вызвать остальную часть параметры не должны быть правильно проанализированы/распознаны скриптом? – nickpish