Запрос Ajax ничего не возвращает. почему?

#php #ajax

#php #ajax

Вопрос:

Ниже приведен запрос ajax.

 $.post('delete.php', {'deletearray':deletearray, 'dir':dir}, function(deleted, undeleted){
    if(undeleted == 0) {
        alert('All '   deleted   ' files delted from the server');
    } else {
        alert(deleted   ' files deleted and '   undeleted   ' files could not be deleted');
    }
}, 'json');
  

и здесь начинается delete.php

 <?php
    if(isset($_POST['deletearray'])) {
        $files = $_POST['deletearray'];
        $dir = $_POST['dir'];
        $deleted = 0;
        $undeleted = 0;

        foreach($files as $file) {
            if(unlink($dir.$file) amp;amp; unlink($dir.'thumb/'.$file)) {
                $deleted   ;
            } else {
                $undeleted   ;
            }
        }
        echo json_encode($deleted, $undeleted);
    }
    return;
?>
  

При запуске кода файлы удаляются успешно, но сообщение не отображается.

Я также попытался изменить запрос ajax как:

  $.post('delete.php', {deletearray:deletearray, dir:dir}, function(deleted, undeleted){
    alert("php finished");
 }, 'json');
  

тем не менее, сообщение не отображается. Так что, я думаю, что-то не так в delete.php досье. Пожалуйста, помогите.

Комментарии:

1. Если проблема в PHP, почему бы вам не проверить журнал ошибок? Или консоль javascript тоже!

2. Скорее всего, вы ищете $_POST['deletearray'] , а не $_POST[deletearray] .

Ответ №1:

Первым делом-

Используйте $_POST['deletearray'] вместо $_POST[deletearray]

Второе-

Вы не можете возвращать разные переменные из PHP scrtipt, все, что вы там печатаете, возвращается в обратном вызове ajax, поэтому просто напишите это-

PHP

 json_encode(array('totalDeleted' => $deleted, 'totalUndeleted' => $undeleted));
  

AJAX

 ...
function(response){
     response=JSON.parse(response);
     console.log(response);
}
  

Ответ №2:

Лучший способ сделать jquery ajax php следующим образом:

jquery:

 <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<script type="text/javascript">

function do_ajax() { 
        //set data
        var myData  = new Array();
        myData.push({name:'deletearray',value:'deletearray'});
        myData.push({name:'dir',value:'dir'});
        //ajax post
        $.ajax({
            dataType: 'json',
            url: 'delete.php',
            type: 'post',
            data: myData,
            success: function(returnData) {
                if(returnData.undeleted == 0) {
                    alert('All '   returnData.deleted   ' files delted from the server');
                } else {
                    alert(returnData.deleted   ' files deleted and '   returnData.undeleted   ' files could not be deleted');
                }
            }
        });
}            
</script>
  

PHP:

 <?php
    $myData = $_POST;
    if(isset($myData['deletearray']) AND isset($myData['dir'])) {
        $files = $myData['deletearray'];
        $dir = $myData['dir'];
        $deleted = 0;
        $undeleted = 0;

        foreach($files as $file) {
            if(unlink($dir.$file) amp;amp; unlink($dir.'thumb/'.$file)) {
                $deleted   ;
            } else {
                $undeleted   ;
            }
        }
        print(json_encode(array('deleted' => $deleted, 'undeleted' => $undeleted)));
        exit();
    }
?>
  

Ответ №3:

Вы должны использовать json_encode следующее:

 json_encode(array('deleted' => $deleted, 'undeleted' => $undeleted));
  

И вы должны получать переменные с data.undeleted помощью и data.deleted

 $.post('delete.php', {'deletearray':deletearray, 'dir':dir}, function(data) {
    if(data.undeleted == 0) {
        alert('All '   data.deleted   ' files delted from the server');
    } else {
        alert(data.deleted   ' files deleted and '   data.undeleted   ' files could not be deleted');
    }
}, 'json');
  

Комментарии:

1. Ваш метод будет работать, должен быть массив. json_encode($deleted, $undeleted) был неправ

2. Вы правы. только массив возвращается с помощью json. Тем не менее, моя проблема сохраняется.