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