我想知道是否可以通过PHP修改一个不刷新的页面(我使用Ajax)。
这听起来像是一个愚蠢的问题,我99.999999肯定不可能。我能想到的唯一方法就是如果我输出一个带有值的数组并使用javascript来修改页面。
我需要返回多个内容,这就是为什么我不想使用javascript并与ajax通信,但我认为数组是唯一的选择。
if(isset($_FILES['payload'])) {
$file = $_FILES['payload'];
try {
$file['name'] = htmlentities($file['name']);
$name = $file['name'];
$extension = pathinfo($name, PATHINFO_EXTENSION);
$finfo = new finfo;
$fileinfo = htmlentities($finfo->file(htmlentities($file['tmp_name']), FILEINFO_MIME));
} catch (Exception $e) {
echo "NULL NAME";
}
if($extension == 'exe' && (substr($fileinfo, 0, 15) == 'application/exe' || substr($fileinfo, 0, 21) == 'application/x-dosexec')) {
try {
/*
* Encryption Removed
*/
mkdir("REMOVED");
move_uploaded_file($file['tmp_name'], "REMOVED");
$td[0] = filesize("REMOVED");
$td[1] = htmlentities($file['name']);
$td[2] = $fileinfo;
echo "NULL NULL";
} catch(Exception $e2) {
echo "NULL ENCRYPTION";
}
} else echo "NULL FILESTATUS";
以上是我目前所拥有的,我为糟糕的格式道歉。 $ td是包含文件信息的数组 - 这是我需要返回javascrpt的内容,但我还需要返回另一个变量,即NULL FILESTATUS,NULL ENCRYPTION,NULL NAME或NULL NULL。
感谢任何帮助。
答案 0 :(得分:3)
是的,数组是你最好的选择。尽管如此,JSON编码。
$ret = array();
$ret['status'] = true/false;
然后将您的echo
语句更改为message
$ret['message'] = 'NULL NAME';
$ret['message'] = 'NULL FILESTATUS';
$ret['message'] = 'NULL NULL ENCRYPTION';
$ret['message'] = 'NULL NULL';
然后将文件信息添加为子数组。
$ret['file'][0] = filesize("REMOVED");
$ret['file'][1] = htmlentities($file['name']);
$ret['file'][2] = $fileinfo;
最后,将编码为JSON的数组返回到javascript。
echo json_encode($ret);
然后你的ajax函数应如下所示:
$.ajax({
type: 'GET/POST',
url: 'path/to/my/script.ext',
dataType:'json',
success: function(response){
if(response.status == true){
//handle the rest of the returned array
}
}
});
答案 1 :(得分:1)
这实际上很常见,你说得对,PHP无法在服务后直接更新页面。如果那是你想做的事情,就无法完成。
然而,使用AJAX它很容易,它实际上是你用AJAX做的。尝试在具有您要使用的信息的对象上使用PHP的json_encode,然后使用AJAX获取该页面,并使用javascript更新相关的页面元素。您还可以查看AngularJS以便更轻松地完成此过程。