2014-06-19 7 views
1

Voici la requête ajax.La requête Ajax ne renvoie rien. Pourquoi?

$.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'); 

et va ici la 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) && unlink($dir.'thumb/'.$file)) { 
       $deleted ++; 
      } else { 
       $undeleted ++; 
      } 
     } 
     echo json_encode($deleted, $undeleted); 
    } 
    return; 
?> 

Up sur l'exécution du code, il supprime les fichiers avec succès, mais pas d'affichage de message.

J'ai essayé également de changer la demande ajax comme:

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

encore n'affiche pas le message. Donc, je suppose que quelque chose ne va pas dans le fichier delete.php. S'il vous plaît aider.

+0

Si le problème est en PHP, pourquoi ne pas consulter le journal des erreurs? Ou la console javascript aussi! –

+5

Vous recherchez probablement '$ _POST ['deletearray']', pas '$ _POST [deletearray]'. – sevenseacat

+1

également '$ _POST ['dir']' – UserProg

Répondre

1

La meilleure façon de faire jquer y + ajax + php est comme suivant:

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) && unlink($dir.'thumb/'.$file)) { 
       $deleted ++; 
      } else { 
       $undeleted ++; 
      } 
     } 
     print(json_encode(array('deleted' => $deleted, 'undeleted' => $undeleted))); 
     exit(); 
    } 
?> 
1

Vous devez utiliser json_encode comme suit:

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

Et vous devez obtenir vars avec data.undeleted et 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'); 
+0

echo json_encode ($ filenameArray) fonctionne bien ... – Tom

+0

Votre méthode fonctionne, devrait être array. 'json_encode ($ deleted, $ undeleted)' était faux – Bora

+0

Vous avez raison. seul le tableau retourne avec json. Encore mon problème persiste. – Tom

2

Première chose-

Utilisation $_POST['deletearray'] au lieu de $_POST[deletearray]

Deuxième chose-

Vous ne pouvez pas revenir différentes variables de la scrtipt PHP, tout ce que vous imprimez il est retourné dans le rappel ajax, alors il suffit d'écrire this-

PHP

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

AJAX

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