在PHP中获取AJAX返回的对象

时间:2017-10-02 16:04:49

标签: php json ajax raspberry-pi

我有一个在raspberry pi上运行服务器脚本的程序(客户端也是服务器)。我正在扫描一个条形码,然后执行一些命令(包括生成XML文件)。当我提交带有'serial'号码的表单时,我希望能够检索server.php中从AJAX($ _POST)方法返回的文件名(字符串)? if (isset($_POST['filename'])不返回文件名,如何使用单个AJAX获取文件名?并在PHP中使用它?我没有错误消息,$ _POST ['filename']为空。我尝试将脚本分离到另一个文件并创建另一个AJAX调用PHP脚本,但它没有完全工作,我想知道是否有可能使用单个AJAX并使PHP监听返回的文件名。

或许有更好的方法来获取外部文件的文件名而不是通过客户端? (总是有单个XML文件等待接收)。

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);

?>

1 个答案:

答案 0 :(得分:1)

正如我在评论中提到的,你在php中没有文件名,因为你的表单不包含filename字段。从ajax接收文件名后,您可以使用serial&amp; amp;文件名字段或第二个解决方案是使用隐藏字段。在ajax中接收数据后,你不能在php中使用它们 - 你必须将它(filename)发送到php。