我有实时文件阅读 我从许多链接获取文件名
name_container="<div><a class=\"friendclick\" data-frclick=\"$fr\" href=\"#\">$fullname</a></div>";
我需要当(data-frclick)改变-it点击时的变化 - 我需要将它的值(targetread = dat)传递为(dat)
$('.friendclick').click(function(){
var dat=$(this).data('frclick');
});
我试图将click()函数放在click事件函数中,只有当我点击链接时它才有效,
但是我无法自动从文件中获得任何实时更新,也许你可以帮我制作(dat)全局变量或任何其他建议!
$('.friendclick').click(function(){
dat=$(this).data('frclick');
var timestamp = null; //read
function comet() {
$.ajax({
type : 'Get',
url : 'includes/read.php?timestamp=' + timestamp+'&targetread='+dat,
async : true,
cache : false,
success : function(data) {
var json = eval('(' + data + ')');
if(json['msg'] == ''){
$('#msg').html('No msg');
}else {
$('#msg').html(json['msg']);
$('#msg').animate({scrollTop:$('#msg').get(0).scrollHeight},200);
}
timestamp = json['timestamp'];
setTimeout('comet()', 1000);
},
error : function(XMLHttpRequest, textstatus, error) {
//alert(error);
setTimeout('comet()', 65000);
}
});
}
$(function() { // write
comet();
$('#send').bind('keyup', function(e) {
var msg = $(this).val();
if(e.keyCode == 13 && e.shiftKey) {
return ;
}else if(msg!='' && e.keyCode == 13) {
$.ajax({
type : 'GET',
url : 'includes/write.php?msg='+ msg.replace(/\n/g,'<br />')+'&target='+dat,
async : true,
cache : false
});
$(this).val('')
}
});
});
});
和用于读取文件的php页面 $目标= $ _ GET [ 'targetread']; 在这里我得到了目标文件 然后从DB获取$ file_name
$filename = 'messaging/'.$file_name.'.txt';
$last = isset($_GET['timestamp']) ? $_GET['timestamp'] : 0;
$current = filemtime($filename);
while( $current <= $last) {
usleep(100000);
clearstatcache();
$current = filemtime($filename);
}
$response = array();
$response['msg'] = file_get_contents($filename);
$response['timestamp'] = $current;
echo json_encode($response);
答案 0 :(得分:0)
我将在这个回答中加上一个声明,即全局性可能是导致严重头痛和混乱的原因。如果有的话,小心使用它们。有关原因,请参阅this question。
一个(非常hack-ish)选项是设置window
对象的属性。
类似的东西:
$('.friendclick').click(function(){
var dat=$(this).data('frclick');
window.myglobalvariable = dat;
});
然后您可以在window.myglobalvariable
。
这可能不是一个非常好的解决方案,但是如果没有看到您的代码如何在更高级别工作并理解您的ajax调用和您的点击事件的范围,那么很难做出更好的推荐。
这与定义不带var
的变量具有相同的效果:
$('.friendclick').click(function(){
var dat=$(this).data('frclick');
myglobalvariable = dat;
});
关于发生了什么,情况稍微清楚一点。
另一种选择是重新计算代码,使您不必使用全局变量。根据您的点击事件和comet()
功能的范围,您可以执行以下操作:
$('.friendclick').click(function(){
var mydata = $(this).data('frclick');
comet(mydata);
});
function comet(data)
{
... code that makes ajax call with "data" as an argument ...
}