Ajax - показать кнопку если файл существует

244
23 июня 2017, 08:41

Как показать кнопку если файл существует на сервере или скрыть кнопку если файла нет (можно с jquery или без), при этом периодически проверять наличие файла? Можно проверить как локально, так и по URL.

Answer 1

Вот серверная часть, например имя файла file_exists.php :

<?php    
    $filename = $_GET['filename'];
    if (file_exists($filename)) {
        echo 'show';
    } else {
        echo "hide";
    }
?>

А вот клиентская часть:

Например у нас есть тег и он изначально скрыт:

<button class="file_exists_button hide">Existing file</button>

Вот код на jquery который периодически (каждые 10 секунд) проверяет наличие файла:

<script>
    var timerId = setInterval(function() {
        $.ajax({
            url: 'file_exists.php?filename=sample1.txt', //Здесь нужно задать `url` файла обработки `ajax` запроса
            success: function(data) {
              $('.file_exists_button').removeClass('show').removeClass('hide').addClass(data);
            }
        });
    }, 10000);
</script>

А это кусок css для показа и скрытия кнопки:

.show{
    display: block;
}
.hide{
    display: none;
}
Answer 2

Можно брать head файла аяксом, чтобы не загружать его полностью:

$.ajax({
    type: 'HEAD',
    url: 'http://www.example.com/myfile.html',
    success: function() {
        $('.btn').show();
    },  
    error: function() {
        $('.btn').hide();
    }
});
Answer 3

Допустим на сервере PHP. создаем "example.php" в нем возвращаем true если файл есть, false если нет.

Спёрто у @Razmik Galstyan example.php:

<?php    
$filename = $_GET['filename'];
if (file_exists($filename)) {
    echo "true";
} else {
    echo "false";
}
?>

и сторона клиента, где ".selector" ваш селектор на кнопку: JQ Ajax Можно сделать периодический запрос, и вызвать AutoUpdateTime !!ТОЛЬКО 1 РАЗ!! после ответа или ошибки запрос повториться через 10 секунд (10000мс)

function AutoUpdateTime() {
  $.ajax( "example.php" )
    .done(function(data, textStatus, jqXHR) {
      if (data=="true")
        $(".selector").show();
      else
        $(".selector").hide();
      //Происходит при ответе
    })
    .fail(function(jqXHR, textStatus, errorThrown) {
      //Происходит при ошибке
    })
    .always(function(datajqXHR, textStatus, jqXHRerrorThrown ) {
      setTimeout(AutoUpdateTime, 10000);
    });
  }  
}

Если файл доступен не только на стороне сервера, то можно воспользоваться решением @Artem Gorlachev

READ ALSO
Плагин параллакс

Плагин параллакс

Посоветуйте небольшой плагин для параллакс эффекта, те

336
Отображение и скрытие элементов

Отображение и скрытие элементов

У меня есть такая табличкаПодскажите как сделать так, чтобы по клику на элемент с классом table__row_active открывались все элементы с классом table__row_noactive...

263
Регулярное выражение и изменение поля js

Регулярное выражение и изменение поля js

Сейчас делается проверка на стороне клиента полей на заполнение и проверка регулярным выражениемНаписано все объемно,так скажем примитивно...

252
Использование smarty функций с json

Использование smarty функций с json

Пытаюсь сделать infinite scroll, с php, smarty и jquery ajaxКак я понял, для того, чтоб не нагружать сильно сервер идеально осуществлять весь процесс на клиентской...

318