如何使javascript变量全局并将其传递给函数ajax?

时间:2014-05-09 21:33:23

标签: javascript ajax

我有实时文件阅读 我从许多链接获取文件名

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);

1 个答案:

答案 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 ...
}
相关问题