php - 我想用 Ajax 每隔几秒执行一次这个脚本而不重新加载页面
问题描述
我想使用 Javascript Ajax 在给定的秒数内执行这个脚本。(这个想法是避免重新加载页面)
这是脚本:
include("databaseCONNECTION.php");
$seconds=1;
$sql = "SELECT * FROM " . $dbDatabase .".chat";
$lines = [];
foreach($dbConnection->query($sql) as $row) {
$line = '<span class="time-message">' . $row['when_send'] . '-' . '</span>';
$line .= '<label class="nick-message"><strong>' . $row['sender'] . ': ' . '</strong></label>';
//$lines[] = $line . ": " . $row['message'];
echo $line . $row['message'] . "<br/><hr/>";
}
解决方案
在基本形式中,您可以使用fetch
setInterval( ()=>{
fetch( '/path/to/php/script.php' )
.then( r=>{
return r.text();
})
.then( data=>{
alert( data );
})
.catch( err=>{
alert(err);
})
}, 1000 * 10 );// every 10s
如果您要使用如下实用程序函数来简化 DOM 节点的创建,您可以生成新内容,而无需一开始就尝试擦除文档。
注意:当 document.write 写入文档流时,在关闭(加载)的文档上调用 document.write 会自动调用 document.open,这将清除文档。
const create=function(t,a,p=null){
let el = ( typeof( t )=='undefined' || t==null ) ? document.createElement( 'div' ) : document.createElement( t );
let _arr=['innerHTML','innerText','html','text'];
for( let x in a ) if( a.hasOwnProperty( x ) && !~_arr.indexOf( x ) ) el.setAttribute( x, a[ x ] );
if( a.hasOwnProperty('innerHTML') || a.hasOwnProperty('html') ) el.innerHTML=a.innerHTML || a.html;
if( a.hasOwnProperty('innerText') || a.hasOwnProperty('text') ) el.innerText=a.innerText || a.text;
if( p!=null ) typeof( p )=='object' ? p.appendChild( el ) : document.getElementById( p ).appendChild( el );
return el;
};
然后你可以像这样修改你的ajax函数(虽然未经测试)
setInterval( ()=>{
fetch( 'chat-data.php' )
.then( r=>{
return r.text();
})
.then( data=>{
/*
Without seeing the HTML this is pseudo-code. Change to suit
your HTML structure.
*/
let parent=document.getElementById('TARGET_ELEMENT_ID');
let record=create(null,{},parent);
Object.keys( data ).map( key=>{
let obj=data[ key ];
create('span',{'class':'time-message','text':obj.when_send},record);
create('label',{'class':'nick-message','text':obj.sender},record);
create(null,{'text':obj.message},record);
create('hr',{},record);
})
})
.catch( err=>{
alert(err);
})
}, 1000 );
推荐阅读
- python - 如何在不使用模型的情况下在 Flask 中创建表和执行查询?
- python - 检查列表中有多少相同的字符行操作
- php - yii2如何翻译动态内容
- c# - 使用 Linq 迭代组并根据条件更改属性
- java - 如何围绕物体旋转相机?
- angular - MSAL Angular - NullInjectorError:InjectionToken MSAL_CONFIG 没有提供程序
- wcf - net core 3 web服务连接问题
- css-animations - 如何在 JSX 中为数组的项目设置动画
- javascript - 使用 JSON 将检查的项目传递给 python
- scala - Spark 结构化流应用程序失败,退出代码:100