2017-10-02 3 views
0

J'ai un programme qui exécute le script du serveur sur fraspberry pi (client qui est aussi un serveur). Je scanne un code à barres qui exécute ensuite quelques commandes (y compris la génération de fichier XML). Lorsque je soumets le formulaire avec le numéro 'serial', je veux être en mesure de récupérer le nom de fichier (chaîne) retourné à partir de la méthode AJAX ($ _POST) dans server.php? if (isset($_POST['filename']) ne retourne pas le nom de fichier, comment puis-je obtenir le nom de fichier avec un seul AJAX? et l'utiliser en PHP? Je n'ai aucun message d'erreur, le $ _POST ['nom de fichier'] est vide. J'ai essayé de séparer le script dans un fichier différent et de créer un autre AJAX appelant ce script PHP mais cela n'a pas fonctionné et je me demande s'il y a une possibilité de le faire avec un seul AJAX et d'écouter PHP pour le nom retourné.Obtenir l'objet AJAX retourné en PHP

Ou peut-être existe-t-il un meilleur moyen d'obtenir le nom de fichier du fichier externe que via le client? (il y a toujours un seul fichier XML en attente d'être récupéré).

server.php

<?php 

$show_error = ""; 

if (isset($_POST['serial'])) { 
    $serialnumber = $_POST['serial']; 

    if ($serialnumber > 0) { 

     if (isset($_POST['filename'])) { 
      $filenamer = $_POST['filename']; 
      echo $filenamer; 
     } else { 
      echo "no filename returned from ajax call"; 
     } 

     $remote_file_url = 'http://' . $_SERVER['REMOTE_ADDR'] . '/345.xml'; //FILENAME NEEDED 
     $local_file = '345.xml';            //FILENAME NEEDED 

     $copy = copy($remote_file_url, $local_file); 
} 

?> 

<html> 
<body> 

<form name="test" method="post"> 
    <input type="number" name="serial" id="serial" value="1"> 
    <input type="submit" name=""> 
</form> 

</body> 
<script type="text/javascript"> 
    function scan(serialnumber) 
    { 
     return $.ajax({ 
      url  : 'http://localhost/test.php', 
      type  : 'POST', 
      dataType : 'json', 
      data  : { serial_no : serialnumber}, 
      cache  : false, 
      success : function(data) { 
           var filename = data[Object.keys(data)[1]]; 
           console.log(filename); 
         } 
      });      
    }; 

    scan(<?php echo $serialnumber; ?>); 

</script> 
</html> 

test.php

<?php 

header('Access-Control-Allow-Origin: *'); 
header('Content-type: text/json'); 

# Get the serial 
$serial_no = $_POST['serial_no']; 
$return['serial_no'] = $serial_no; 

# Get the filename of the XML file 
$filename = shell_exec('find /var/www/html/*.xml -printf "%f"'); 
$return['filename'] = $filename; 

$return['scanpink'] = 1; 
echo json_encode($return); 

?> 
+0

Qu'est-ce qui cause exactement des problèmes? Quel (s) message (s) d'erreur obtenez-vous? Qu'avez-vous essayé jusqu'à présent? Ceux-ci devraient tous être adressés dans votre question –

+0

@WilliamPerron 'if (isset ($ _ POST ['filename'])' ne retourne pas le nom de fichier, comment puis-je obtenir le nom de fichier avec un seul AJAX? Et l'utiliser en PHP? Je n'ai pas message d'erreur, le '$ _POST ['nomfichier']' est vide.J'ai essayé de séparer le script dans un fichier différent et de créer un autre AJAX appelant ce script PHP mais cela n'a pas fonctionné et je me demande s'il y a une possibilité de le faire avec un seul AJAX et que PHP écoute le nom de fichier retourné – UZIERSKI

+0

il n'y a pas d'élément 'filename' dans l'élément' data' de l'appel ajax, donc il est logique qu'il n'existe pas dans la variable '$ _POST'. a part, vous devriez probablement ajouter cette information dans votre question –

Répondre

1

Comme je l'ai mentionné dans mon commentaire, vous n'avez pas le nom de fichier en php parce que votre formulaire ne comprend pas filename champ. Après avoir reçu le nom de fichier d'ajax, vous pouvez faire une autre requête ajax avec les champs de nom de fichier & ou la seconde solution consiste à utiliser un champ caché. Après avoir reçu des données en ajax vous ne pouvez pas les utiliser en php - Vous devez l'envoyer (filename) en php.