Хорошо. У меня есть галерея-приложение, которое я создаю, где у меня есть список миниатюр, и когда вы нажимаете, извлекает исходное изображение с помощью ajax-вызова showfile.php, который просто возвращает файл через header(), используя X-Sendfile , Это работает, но по какой-то причине я не могу получить последующий вызов, чтобы вернуть правильные значения, и скрипт ломается. (First return возвращает «null», что я хочу, а второй возвращает изображение как двоичные данные).PHP - обратное изображение с заголовком («X-sendfile») возвращает null на первой итерации, двоичный на второй (с использованием ajax)
Хорошо. Вот код для Ajax-вызова:
$('.lightbox').click(function(e) {
e.preventDefault();
var $this = $(this);
var linkName = $(this).attr('href').split('=')[1];
$.ajax({
url: 'showfile.php',
type: 'GET',
dataType: 'binary',
data: 'file='+linkName+'',
responseType: 'blob',
processData: false,
success: function(result) {
var image = new Image();
image.src = URL.createObjectURL(result);
$('#lightbox_container').append(image).removeClass('hidden').addClass('visible');
image.onload = function() { var imageWidth = image.width/2; $('#lightbox_container').css({'margin-left':'-'+imageWidth+'px'}); window.URL.revokeObjectURL(image.src);};
$('#overlay').removeClass('hidden').addClass('visible');
$('.nextbutton,.prevbutton').click(function(e) {
if ($(e.target).hasClass('prevbutton')) {
var linkName = $this.parent('.pictures').prev('li.pictures').find('a').attr('href').split('=')[1];
$.ajax({
url: 'showfile.php',
type: 'GET',
datatype: 'binary',
data: 'file='+linkName+'',
responseType: 'blob',
processData: false,
success: function(result2) {
var image = new Image();
var binaryData = [];
binaryData.push(result2);
image.src = URL.createObjectURL(new Blob(binaryData));
// image.src = URL.createObjectURL(result2);
$('#lightbox_container img').remove();
$('#lightbox_container').append(image);
image.onload = function() { var imageWidth = image.width/2; $('#lightbox_container').css({'margin-left':'-'+imageWidth+'px'}); };
}
})
}
})
}
});
});
Это работает, вплоть до второго АЯКС-вызова - возвращаемое значение из showfile.php на второй вызов не является бинарным блок (если смотреть на NET -tab в консоли, я получаю правильное изображение), но по какой-то причине createObjectUrl не работает (я пробовал без бинарного двоичного файла, но тогда createObjectUrl просто терпит неудачу, естественно, поскольку результат неверен . для использования
showfile.php выглядит следующим образом:
<?php
require_once('conf/config.php');
if (!session_id()) { session_start(); };
if ($isloggedin) {
if (isset($_GET['file'])) {
// $getFile = readfile($_SERVER['DOCUMENT_ROOT'].'/'.$userpath.$username.'pictures/'.$_GET['file']);
header('Content-type: image/jpeg');
header('X-Sendfile: '.$_SERVER['DOCUMENT_ROOT'].'/'.$userpath.$username.'pictures/'.$_GET['file'].''); # make sure $file is the full path, not relative
exit;
// echo base64_encode($getFile);
}
}
?>
Есть некоторые прокомментированные строки, вместо этого я пытаюсь использовать readfile(), не работает лучше, просто кажется, что в общем-то все медленнее.
Итак, что мне нужно: что я делаю неправильно? Поскольку ajax-call работает при первом щелчке, он должен работать и во втором клике, не так ли? Но это не так. Однако, если я закрою изображение и нажму новый миниатюру, все будет хорошо. Не обновляйте страницу или что-то в этом роде, просто закройте всплывающее окно и щелкните новый миниатюру, он снова работает. Но по какой-то причине он не возвращает одно и то же значение «null» при втором щелчке.
Это заставляет меня думать, что есть что-то, что не закрывается или не перезаписывается или что-то еще, и что-то вроде проблемы с «оставшимся» - что приводит меня к php-файлу, так как это то, что, кажется, возвращает разные значения. Есть ли что-нибудь, что я могу сделать, чтобы «обнулить»?
Я пробовал Google, но на самом деле не нашел столько информации об этих функциях.
О, второй ajax-click возвращает, как я уже сказал, некоторую двоичную информацию, но когда я пытаюсь создать объект Url из него, используя blob, он не работает, т. Е. URL-адрес не работает, он просто показывает сломанный значок изображения, а не фактическое изображение, хотя URL-адрес кажется правильным (тот же URL-адрес, что и я снова просматриваю миниатюры и снова нажимаю, начиная с), и, как я уже сказал, net-tab на консоли показывает изображение, являющееся вернулся в обоих случаях.