目前我正在开发一些应用程序,我在其上执行一个触发PHP脚本的AJAX请求。这个脚本回显并在执行时返回一些东西。 现在能够在触发.success()之前在前端显示它会很好。这是可能的,如果是这样的话;如何?
干杯!
更新了一些代码
Ajax +提交(js)
$('document').ready(function() {
setAlbum.getForm.submit( function( e ) {
setAlbum.albumSubmit( e );
return false;
});
});
var setAlbum = {
getForm : $('#albumForm'),
createUrlList : function() {
var rawUrlList = setAlbum.getForm.find('#AlbumUrlList').val();
var urlList = rawUrlList.split(/\r?\n/g);
return urlList;
},
albumSet : function() {
var set = {
albumName : setAlbum.getForm.find('#AlbumName').val(),
albumDescription : setAlbum.getForm.find('#AlbumDescription').val(),
albumUrlList : setAlbum.createUrlList(),
};
return set;
},
albumSubmit : function( e ) {
e.preventDefault();
console.log( setAlbum.albumSet() );
$.ajax({
type: 'POST',
url: "query.php",
data: setAlbum.albumSet(),
success: function(data) {
console.log(data)
}
});
}
};
query.php(部分)
$naming = $_POST['albumName'];
$albumDescription = ['albumDescription'];
$photolist = $_POST['albumUrlList'];
$albumset = [
'AlbumName' => $naming,
'ItemList' => $photolist,
'AlbumDescription' => $albumDescription
];
/** GET FILESIZE CURL **/
function getFileSize( $url ) {
$headers = get_headers($url);
$fileSize = -1;
echo var_dump($headers);
echo $url;
foreach( $headers as $h ) {
preg_match( '/Content-Length: (\d+)/', $h, $m );
if ( isset($m[1]) ) {
$fileSize = (int)$m[1];
break;
}
}
$formattedFileSize = formatSizeUnits( $fileSize );
echo 'Filesize:: ' . $formattedFileSize;
return $fileSize;
}
//* FILESIZE FORMATTER *//
function formatSizeUnits( $bytes ) {
if ($bytes >= 1073741824) {
$bytes = number_format($bytes / 1073741824, 2) . ' GB';
} elseif ($bytes >= 1048576) {
$bytes = number_format($bytes / 1048576, 2) . ' MB';
} elseif ($bytes >= 1024) {
$bytes = number_format($bytes / 1024, 2) . ' KB';
} elseif ($bytes > 1) {
$bytes = $bytes . ' bytes';
} elseif ($bytes == 1) {
$bytes = $bytes . ' byte';
} else {
$bytes = '0 bytes';
}
return $bytes;
}
function getPhotosSize( $array, $maxSize ) {
$photos = $array['ItemList'];
$countTotal = sizeof($photos);
$count = 1;
foreach( $photos as $photo ) {
echo '<h2>Checking filesize…</h2>';
// saveImage( $img, $fullpath )
$url = $photo;
$photocount = sprintf('%02u', $count);
getFilesize($url);
}
}
getPhotosSize($albumset, $maxFileSize);
答案 0 :(得分:1)
因此,基本上您希望在执行脚本时进行实时日志监控。你可以在ajax中执行此操作,但它将是一系列的ajax调用。
在PHP脚本方面,您可能需要有一个记录器文本,用于显示该执行所需的消息。因此,不是“回显”这些消息,而是将其保存在临时文本文件中,然后将其解析并返回到客户端(ajax调用中的#2)。
另一种方法是通过套接字。请参阅http://socket.io/。这是更清洁的方法(我推荐)。每个客户端(js端)都可以连接到套接字连接,在你的php端,你只需要在该套接字连接中发布一个文本,就是这样!你有点模仿聊天服务器 - 客户端方法。
答案 1 :(得分:1)
是的,这是可能的。流程如下:
我做到了这一点。例如,在Drupal中有一个名为“后台进程”的模块。
答案 2 :(得分:0)
是的,您必须使用AJAX请求中的函数(数据)捕获返回的值。
答案 3 :(得分:0)
已编辑:我之前的代码不相关,因为我不知道在哪里触发了()。我现在已经更新了。
<!DOCTYPE html>
<html>
<head>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js">
</script>
<script>
$(document).ready(function(){
var flag = false; //means no ajax request. true means ajax request processing.
function send_request() {
flag = true;
$.ajax({
url: "http://localhost/test.html",
//async: true,
success: function(data) {
flag = false;
output = data;
alert(data);
}
});
}
setTimeInterval('startProcess()', 1000);
function startProcess() {
if(flag) {
//request is being processed.
}else{
//request ended. stop the timer
}
}
});
</script>
</head>
<body>
<div id="container"></div>
</body>
</html>