2012-02-01 4 views
0

Я пытаюсь удалить файл с помощью вызова AJAX. Это должно быть достаточно простым, но по какой-то причине я получаю сообщение об ошибке при попытке доступа к $_SERVER['DOCUMENT_ROOT'] при использовании AJAXДоступ к глобальным переменным PHP при использовании JQuery AJAX

Я создал форму HTML и нет проблем. Позвольте мне показать код

Это PHP, который должен удалить изображение.

$photo_name = $_POST['photo']; 
$cat_id = $_POST['cat_id']; 
$original_path = $_SERVER['DOCUMENT_ROOT'].$photo_name; 
if(file_exists($original_path))unlink($original_path); 
$data['success']=true; 

Запуск JQuery ниже доходностей ошибка синтаксиса: Неожиданный Токен

$.ajax({ 
    type : 'POST', 
    url : "includes/json_delete_photo.php", 
    dataType : 'json', 
    data: { 
    'photo': $('#image_name').val(), 
    'cat_id': $("#category_id").val(), 
    }, 
    success : function(data){ 
    alert("done"); 
    }, 
    error : function(XMLHttpRequest, textStatus, errorThrown) { 
alert("problem: " + errorThrown); 
    } 
}); 

Однако, просто используя форму HTML, чтобы представить json_delete_photo.php без AJAX работает, и если я удалю использование $_SERVER['DOCUMENT_ROOT'] из моего PHP, AJAX не возвращает ошибку (но мое изображение не удаляет !!)

Я почесал голову над этим, и я не уверен, как отправить корень на страницу.

Спасибо за любую помощь.

+1

Что такое * точное сообщение об ошибке? Выдержка, как показано выше, не имеет такой синтаксической ошибки. - А во-вторых, только потому, что он приходит через AJAX, это не значит, что вы должны принимать непроверенные и неавторизованные команды удаления. Имя файла может содержать длинный путь. – mario

+2

@mario +1. Кроме того, я не могу сказать наверняка, но если '$ _POST ['photo']' имеет ведущий '/', тогда он должен быть '$ _SERVER ['DOCUMENT_ROOT']. '/'. $ photo_name; 'Что касается ошибки токена, отправьте номер строки и содержимое строки. Убедитесь, что ваш '' '(апострофа) не использует« причудливую »' '' (левую/правую одиночную кавычку). – drew010

+0

Вы использовали одинарные кавычки в селекторе jQuery '$ ('# image_name')'. Я не уверен, что вы можете это сделать, весь рабочий код, который я когда-либо использовал/видел ... используйте двойные кавычки для селекторов. –

ответ

0

Если у вас есть конечная запятая в конце этой строки?

'cat_id': $("#category_id").val(), 
+0

Это не имеет значения. В качестве части массива конечная запятая не имеет значения, если после нее есть элемент. – Alun

0

В качестве временного решения, попробуйте выводить переменную $_SERVER непосредственно в Ajax вызова

data: { 
    'photo': $('#image_name').val(), 
    'cat_id': $("#category_id").val(), 
    'document_root': <?php echo $_SERVER['DOCUMENT_ROOT']; ?> 
    }, 

и со ссылкой на переданное по $_POST['document_root'] переменной в вашем PHP скрипт.

Чтобы узнать точную причину ошибки синтаксиса, используйте инструмент отладки, такой как "Chrome >> Tools >> Developer Tools >> Network Tab", запустите свой скрипт и просмотрите файл, вызванный ajax. Вы можете видеть отправленные точные заголовки и ответ.

+0

Спасибо, это был хороший звонок. Откройте для себя преимущества консоли прямо сейчас! Удалось исправить исходную ошибку. – Alun

Смежные вопросы