jQuery Ajax funktioniert nicht in iOS (mit list.js)

Lesezeit: 4 Minuten

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


Vielleicht ist es zu weit hergeholt, da ich den Fehler nicht reproduzieren kann, aber wie ich sehe, befindet sich Ihre URL zu admin-ajax.php unter HTTPS, während Ihre Website auf HTTP ausgeführt wird.

Versuche dies:

$ajax_url = admin_url( 'admin-ajax.php', 'http' );

1385930cookie-checkjQuery Ajax funktioniert nicht in iOS (mit list.js)

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy