2016-04-11 15 views
8

Trovato una funzione che non funziona sul nostro sito Web, ma solo su dispositivi iOS (iPad, iPhone).jQuery Ajax non funziona in iOS (con list.js)

Stiamo utilizzando list.js per eseguire un filtraggio attivo di una directory in base a ciò che è stato digitato in un input. Esistono anche due campi di selezione che consentono il filtraggio in base alle tassonomie. Questi funzionano bene.

La funzione di filtro live funziona in Chrome, Firefox, Safari, IE e Android. Non sono sicuro dove andare il prossimo per il debug, come abbiamo fatto la seguente senza alcun risultato:

  • controllata per assicurarsi che nessun nome di file maiuscole/minuscole e/o percorsi che potrebbero viaggio fino iOS.
  • Aggiunto un console.log al codice ajax per assicurarsi che funzioni su iOS (è verificato da Web Inspector tramite Safari).
  • Controllato per errori o avvisi tramite Web Inspector (senza errori, senza avvisi, niente).

Ecco il codice dal nostro file 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); 

    } 

E 'un sito WordPress utilizzando il Sage starter theme, e che php_ajax_url po' sopra i riferimenti al seguente nel 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); 

Sono nuovo a tutte le cose Ajax e mi piacerebbe avere qualche indicazione su dove andare dopo. O vedi qualcosa ovviamente sbagliato?

+0

provare a utilizzare un percorso relativo al posto di un percorso assoluto nel vostro URL. –

+0

Bruno: Potresti chiarire dove posso farlo? Grazie! – SPS

+0

Bruno si riferisce alla funzione admin_url nella funzione delle risorse. Admin_url restituisce un percorso assoluto non relativo. Non sono sicuro che questo risolverà il tuo problema, ma è quello che ti sta suggerendo di provare. –

risposta

1

Forse è un po 'difficile dal momento che non riesco a riprodurre l'errore, ma come posso vedere, mentre il tuo sito è in esecuzione su HTTP, l'URL di admin-ajax.php è in HTTPS.

Prova questa:

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