PHP jquery ajax отсоединить изображения из папки не работает

Я пытаюсь показать и удалить изображения, которые хранятся в папках, но я не могу запустить код JS, который удаляет каждое.

Мой код php в index.php:

// folder with files    
$pathimages = $_SERVER['DOCUMENT_ROOT'];
$pathimages .= "/uploads/files/";

// showing images
foreach(glob($pathimages.'*') as $filename){
    $ext = pathinfo($filename, PATHINFO_EXTENSION);
    $name_only = basename($filename, ".".$ext);

    echo "<img src=\"../uploads/files/" .$name_only.".".$ext. "\" width=\"30\" />
        <a onclick=\"DeleteImage(".$name_only.",".$ext."); return false;\" href=\"javascript:;\">X</a>
        <br />";
}

(Я отправляю имя файла и расширение в двух переменных, я не знаю, почему)

Когда я нажимаю «X», вызываю функцию «DeleteImage», но не работает.

Функция JS из импортированного файла .js:

 function DeleteImage(name_only, ext){
    var parametros = {
        "name_only" : name_only,
        "ext" : ext
    };

    $.ajax({
        url: 'views/delete_image.php',
        type: "POST",
        data: parametros,
        success: function(datos){
            console.log("check");
        }
    });
}

И файл удаления php:

$name_only = $_POST['name_only'];
$ext = $_POST['ext'];

$pathimages = $_SERVER['DOCUMENT_ROOT'];
$pathimages .= "/uploads/files/";

unlink($pathimages . $name_only .".". $ext);
echo "Deleted";

У меня есть что-то подобное, но с записями в базе данных и работает нормально, методом GET, удалением, редактированием и т.д. Но тут начались проблемы. Большое спасибо, и я извиняюсь за мой английский.


person santyas    schedule 14.08.2013    source источник
comment
Есть ошибки? Правильный путь? Разрешения на папку?   -  person John    schedule 14.08.2013
comment
Здравствуйте, @John Да, извините, в консоли на Chrome: Uncaught ReferenceError: png не определен www.magzineapp.com/cloud/:1 onclick   -  person santyas    schedule 14.08.2013
comment
Вы видите «проверить» в консоли?   -  person John    schedule 14.08.2013
comment
Добавьте в console.log('check'), console.log(datos) и сообщите нам, что вы видите.   -  person Optimus Prime    schedule 14.08.2013
comment
@Джон Нет, ничего, Оптимус Хорошо, я пытаюсь!   -  person santyas    schedule 14.08.2013
comment
@OptimusPrime Нет, ничего. Спасибо   -  person santyas    schedule 14.08.2013
comment
попробуй один раз, data:{name_only:name_only,ext:ext},   -  person Optimus Prime    schedule 14.08.2013
comment
@OptimusPrime Спасибо! Я не знаю почему, но это решение! Можешь опубликовать ответ?   -  person santyas    schedule 14.08.2013
comment
@santyas Рад, что это сработало. Опубликовал это как ответ.   -  person Optimus Prime    schedule 14.08.2013


Ответы (5)


Я думаю, проблема в массиве, который вы передаете,

Попробуйте использовать,

data:{name_only:name_only,ext:ext},

для передачи параметров, или вы можете рассмотреть возможность передачи их как массивы json.

person Optimus Prime    schedule 14.08.2013
comment
Еще раз спасибо, а в чем разница между var parametros = {"name_only": name_only, "ext": ext}; И data:{name_only:name_only,ext:ext},? - person santyas; 14.08.2013
comment
на самом деле, если вы используете массивы, я думаю, вам нужно передать их как массивы json. Я добавил ссылку на ответ. или, может быть, вам просто не нужны кавычки. Я не уверен, так как я всегда использую метод, который я предложил. - person Optimus Prime; 14.08.2013

Поскольку это ошибка javascript, взгляните на эти строки кода:

<img src=\"../uploads/files/" .$name_only.".".$ext. "\" width=\"30\" />
        <a onclick=\"DeleteImage('".$name_only."','".$ext."'); return false;\" href=\"javascript:;\">X</a>
        <br />

Вы должны добавить кавычки в javascript.

person benestar    schedule 14.08.2013
comment
Кстати, эта строка кода работает так же, как в вашем исходном сообщении. Я попробовал это здесь writecodeonline.com/php - person ; 14.08.2013
comment
@JustinWyllie Да, это была не ошибка php, а ошибка javascript, как я писал выше. - person benestar; 14.08.2013
comment
О да. Извиняюсь. Он не заключал параметры в кавычки. я понимаю - person ; 14.08.2013

Я не думаю, что действительно возможно предложить ответ. Проблема может быть где угодно. Я бы рассмотрел: I. Отображается ли изображение на странице? II. Поставьте точку отладки в DeleteImage и посмотрите, что такое параметры на самом деле. Это также проверит, что он вызывается. III. Вызов ajax вообще сделан? Здесь снова пригодятся Firebug или инструменты разработчика Chrome. Посмотрите на вкладку «Сеть» и опцию XHR. IV. Ok. Итак, мы зашли так далеко; повторить сообщение из обработчика ajax - вы передали туда правильные параметры? v. Что возвращает unlink? он возвращает истину или ложь. Если false, то вероятны проблемы с путем или разрешениями.

В основном мне кажется, что ваш вопрос показывает отсутствие знаний о том, как отлаживать файлы .

person Community    schedule 14.08.2013
comment
Спасибо за внимание, стараюсь. 1 - Изображение выглядит хорошо, URL в порядке. 2 - Как я могу поставить один? 3 - Он был импортирован и запущен js-код в приложении. Но когда я хочу удалить, ничего не происходит. 4 - Параметры в моем вопросе, это копия моего кода, но у меня нет поведения в отладчике. 5 - Я не использовал возврат в delete.php :/ - person santyas; 14.08.2013

  1. Хорошо.

  2. Если вы используете Хром. Нажмите F12. Выберите Источники. Щелкните маленькую стрелку слева. Выберите JS-файл, содержащий DeleteImage, или страницу, если это встроенный Javascript. Откройте файл (в отладчике). Используйте Watch Expressions с правой стороны, чтобы увидеть, что такое paramatros на самом деле, щелкнув знак + и введя parametros. Затем нажмите X. Отладчик начнет действовать и остановится на строке, где вы поставили точку останова. (Теперь посмотрите на Watch Expressions справа и введите имя переменной, которую вы хотите отслеживать, например, parametros).

  3. «Ничего не происходит»: вы уверены? Теперь у вас открыт отладчик Chrome, перейдите на вкладку «Сеть»; и нажмите XHR (что означает, что вы видите только запросы Ajax). Посмотрите на заголовки и ответ на панелях справа. Теперь вы можете видеть, что произошло: был ли сделан вызов ajax (я предполагаю, что вы загрузили jQuery перед файлом, содержащим DeleteImage?)? Что оно вернуло?

    • -
  4. Теперь вы можете увидеть, как ответ на вызов ajax изменяет файл удаления на это: $result = unlink($pathimages . $name_only .".". $ext); эхо $результат. Это правда или ложь? Выполните var_dump() для $_POST, т.е. var_dump($_POST) в файле удаления, и посмотрите, что вы получите в ответ — вы опубликовали то, что хотели?

Еще одна вещь, которую вы могли бы попробовать, это вызвать этот php-скрипт удаления непосредственно в адресной строке браузера с известными параметрами, чтобы увидеть, работает ли эта часть.

person Community    schedule 14.08.2013
comment
Хорошо, я тестирую ваше решение в отладчике. Но я изменил эту строку: parametros // data:{name_only:name_only,ext:ext}, и работает нормально. Я не знаю как, это то же самое! - person santyas; 14.08.2013

можете добавить

 echo $pathimages . $name_only .".". $ext;

в deletefile.php

я думаю, $ext повторяется. но я не уверен.

person Fatihd    schedule 14.08.2013