Encontré una función que no funciona en nuestro sitio web, pero solo en dispositivos iOS (iPad, iPhone).
estamos usando lista.js para hacer un filtrado en vivo de un directorio basado en lo que se escribe en una entrada. También hay dos campos de selección que permiten el filtrado basado en taxonomías. Estos funcionan bien.
La función de filtrado en vivo funciona en Chrome, Firefox, Safari, IE y Android. No estoy seguro de dónde ir a continuación para la depuración, ya que hemos hecho lo siguiente sin éxito:
- Verificado para garantizar que no haya nombres de archivos en mayúsculas o minúsculas y/o rutas que puedan hacer tropezar a iOS.
- Se agregó un archivo console.log al código ajax para asegurarse de que funciona en iOS (lo verifica Web Inspector a través de Safari).
- Comprobado en busca de errores o advertencias a través de Web Inspector (sin errores, sin advertencias, nada).
Aquí está el código de nuestro archivo 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);
}
Es un sitio de WordPress usando el Tema de inicio sabioy eso php_ajax_url
bit anterior hace referencia a lo siguiente en 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);
Soy nuevo en todo lo relacionado con Ajax y me encantaría recibir orientación sobre adónde ir a continuación. O, ¿ves algo obviamente mal?
Tal vez sea una posibilidad remota ya que no puedo reproducir el error, pero como puedo ver, mientras su sitio se ejecuta en HTTP, su URL a admin-ajax.php está bajo HTTPS.
Prueba esto:
$ajax_url = admin_url( 'admin-ajax.php', 'http' );
Intente usar una ruta relativa en lugar de una ruta absoluta en su URL.
– usuario5563910
11 de abril de 2016 a las 14:14
Bruno: ¿Podría aclarar dónde puedo hacer eso? ¡Gracias!
– MSF
12 de abril de 2016 a las 13:17
Bruno se refiere a la función admin_url en su función de activos. admin_url devuelve una ruta absoluta, no relativa. No estoy seguro de si eso solucionará su problema, pero eso es lo que sugiere que intente.
–Patrick Lyver
14 de abril de 2016 a las 4:06
¿Tiene una URL del sitio web en cuestión que pueda compartir?
–Patrick Lyver
14 de abril de 2016 a las 4:10
¿No funciona en absoluto o funciona solo en algún momento? Una duda son las múltiples llamadas de AJAX, ya que no está cancelando la ejecución previa de AJAX. El safari de iOS solo permite una conexión HTTP de señal a la vez.
– Ronak Patel
14 de abril de 2016 a las 12:24