Znaleziono funkcję, która nie działa na naszej stronie - ale tylko na urządzeniach z systemem iOS (iPad, iPhone).Ajax jQuery nie działa w systemie iOS (z list.js)
Używamy list.js do filtrowania na żywo katalogu na podstawie tego, co zostało wpisane w danych wejściowych. Istnieją również dwa pola wyboru, które umożliwiają filtrowanie w oparciu o taksonomie. Działają dobrze.
Funkcja filtrowania na żywo działa w przeglądarce Chrome, Firefox, Safari, IE i Android. Nie wiem, gdzie iść dalej do debugowania, jak zrobiliśmy następujące bezskutecznie:
- sprawdzone w celu zapewnienia bez górnego/małe litery nazw plików i/lub ścieżek, które mogą potknąć się iOS.
- Dodano plik console.log do kodu ajax, aby upewnić się, że uruchamia on system iOS (jest to zweryfikowany przez Web Inspectora za pośrednictwem Safari).
- Sprawdzono pod kątem błędów lub ostrzeżeń za pomocą programu Web Inspector (brak błędów, brak ostrzeżeń, brak).
Oto kod z naszego pliku main.js:
var listingsArray;
$.ajax({
url: php_ajax_url,
type: "POST",
data: "action=sackville_directory_feed",
async: false,
success: function(results) {
var listings = JSON.parse(results);
listingsArray = $.map(listings, function(el) {
return el;
});
},
error: function() {
console.log('Cannot retrieve data.');
}
});
var directory = {};
var directoryListings = $('.list');
directory.renderHTML = function(z, listing){
directoryListings.append('<div class="card card-directory col-lg-3 col-md-4 col-sm-6"><div class="directory-image" style="background-image: url(' + listing.image + ')"></div><h3 class="name">' + listing.name + '</h3><p class="description">' + listing.description + '</p><span>' + (listing.address !== '' ? listing.address + ', ' : '') + (listing.city_province !== '' ? listing.city_province : '') + (listing.postal !== '' ? ', ' + listing.postal : '') + '</span><span>' + listing.phone + (listing.website !== '' ? ' | <a href="' + listing.website + '">Visit Website</a>' : '') + '</span></div>');
};
directory.init = function(){
directoryListings.empty();
$.each(listingsArray, function(i, listing){
directory.renderHTML(i, listing);
});
};
$('.directory-filters').on('change', function(){
var option = $(this).val();
var label = $(this).find('option:selected').text();
directoryListings.empty();
if(option === 'all'){
directory.init();
}
$.each(listingsArray, function(i, listing){
if(listing.hasOwnProperty('category') && listing.category.indexOf(option) >= 0){ /* If category filter is contained within listing data */
directory.renderHTML(i, listing);
} else if(listing.hasOwnProperty('theme') && listing.theme.indexOf(option) >= 0){ /* If theme filter is contained within listing data */
directory.renderHTML(i, listing);
}
});
$('#current-results').html(label);
});
/* Get it started */
directory.init();
/* List JS live search */
directory.options = {
valueNames: [ 'name', 'description', 'category' ]
};
directory.directoryList = new List('directory', directory.options);
}
Jest to witryna oparta na WordPressie pomocą Sage starter theme, a php_ajax_url
nieco powyżej odniesienia następujące w functions.php:
function assets() {
wp_enqueue_style('sage/css', Assets\asset_path('styles/main.css'), false, null);
$ajax_url = admin_url('admin-ajax.php');
wp_enqueue_script('sage/js', Assets\asset_path('scripts/main.js'), ['jquery'], null, true);
wp_localize_script('sage/js', 'php_ajax_url', $ajax_url);
}
add_action('wp_enqueue_scripts', __NAMESPACE__ . '\\assets', 100);
Jestem nowicjuszem w Ajaxie i chciałbym otrzymać wskazówki dotyczące tego, dokąd pójść dalej. Czy widzisz coś w oczywisty sposób nie tak?
Spróbuj użyć ścieżki względnej zamiast bezwzględną ścieżkę w adresie URL. –
Bruno: Czy mógłbyś wyjaśnić, gdzie mogę to zrobić? Dzięki! – SPS
Bruno odwołuje się do funkcji admin_url w twojej funkcji aktywów. Parametr admin_url zwraca bezwzględną ścieżkę, która nie jest względna. Nie jestem pewien, czy to rozwiąże problem, ale właśnie to sugeruje, aby spróbować. –