Eine Funktion gefunden, die auf unserer Website nicht funktioniert — sondern nur auf iOS-Geräten (iPad, iPhone).
Wir verwenden list.js eine Live-Filterung eines Verzeichnisses durchzuführen, basierend auf dem, was in eine Eingabe eingegeben wurde. Es gibt auch zwei Auswahlfelder, die eine Filterung basierend auf Taxonomien ermöglichen. Diese funktionieren gut.
Die Live-Filterfunktion funktioniert in Chrome, Firefox, Safari, IE und Android. Ich bin mir nicht sicher, wohin ich als nächstes zum Debuggen gehen soll, da wir Folgendes vergeblich getan haben:
- Überprüft, um sicherzustellen, dass keine Dateinamen und/oder Pfade in Groß-/Kleinschreibung geschrieben werden, die iOS stören könnten.
- Dem Ajax-Code wurde ein console.log hinzugefügt, um sicherzustellen, dass er auf iOS ausgelöst wird (ist es; überprüft von Web Inspector über Safari).
- Über Web Inspector auf Fehler oder Warnungen geprüft (keine Fehler, keine Warnungen, nichts).
Hier ist der Code aus unserer main.js-Datei:
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 ist eine WordPress-Site, die die Sage Starter-Themaund das php_ajax_url
Bit oben verweist auf Folgendes in der 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);
Ich bin neu in Sachen Ajax und würde mich über eine Anleitung freuen, wohin ich als nächstes gehen soll. Oder sehen Sie irgendetwas offensichtlich falsch?
Versuchen Sie, einen relativen Pfad anstelle eines absoluten Pfads in Ihrer URL zu verwenden.
– Benutzer5563910
11. April 2016 um 14:14 Uhr
Bruno: Können Sie mir erklären, wo ich das tun kann? Vielen Dank!
– SPS
12. April 2016 um 13:17 Uhr
Bruno bezieht sich auf die Funktion admin_url in Ihrer Assets-Funktion. Die admin_url gibt einen absoluten Pfad zurück, nicht relativ. Ich bin mir nicht sicher, ob das Ihr Problem beheben wird, aber er schlägt vor, dass Sie es versuchen.
– Patrick Lyver
14. April 2016 um 4:06 Uhr
Haben Sie eine URL zu der betreffenden Website, die Sie teilen können?
– Patrick Lyver
14. April 2016 um 4:10 Uhr
Geht es gar nicht oder nur manchmal? Ein Zweifel sind mehrere AJAX-Aufrufe, da Sie zuvor ausgeführtes AJAX nicht abbrechen. iOS-Safari erlaubt jeweils nur eine einzige HTTP-Verbindung.
– Ronak Patel
14. April 2016 um 12:24 Uhr