2016-04-11 27 views
8

iOSデバイス(iPad、iPhone)のみで、私たちのウェブサイトでは機能しない機能が見つかりました。jQuery AjaxがiOS(list.js)で動作しない

私たちはlist.jsを使用して、入力に入力されたものに基づいてディレクトリをライブでフィルタリングしています。タクソノミーに基づいたフィルタリングを可能にする2つの選択フィールドもあります。これらはうまく動作します。

ライブフィルタリング機能は、Chrome、Firefox、Safari、IE、Androidで動作します。

のiOSをつまずか可能性が全く小文字大文字/ファイル名および/またはパスを確保しないようにチェック
  • :我々は無駄に次のことをやったように私は、どこデバッグのために次に行きわかりません。
  • ajaxコードにconsole.logを追加して、iOSで起動していることを確認します(これはSafari経由のWeb Inspectorで確認済みです)。
  • Web Inspector経由でエラーまたは警告がチェックされています(エラーなし、警告なし、何もありません)。

ここに私たちの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); 

    } 

それはのfunctions.phpに以下のSage starter themeを使用してWordPressのサイトだし、そのphp_ajax_urlビット参照の上で:

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); 
は、

私はAjaxのことを初めて知りました。それとも明らかに間違ったことがありますか?

+0

ではなく、あなたのURLに絶対パスの相対パスを使用してみてください。 –

+0

Bruno:私はどこでそれを行うことができるかを明確にすることができますか?ありがとう! – SPS

+0

Brunoはあなたの資産機能のadmin_url関数を指しています。 admin_urlは相対パスではなく絶対パスを返します。それがあなたの問題を解決するかどうかはわかりませんが、それは彼があなたに試してみたいことです。 –

答えて

1

私はエラーを再現できないので多分ロングショットですが、あなたのサイトがHTTP上で動作している間、admin-ajax.phpへのURLはHTTPSの下にあります。

はこれを試してみてください:

$ajax_url = admin_url('admin-ajax.php', 'http'); 
関連する問題