3

我是“初学者”和“自学成才”,但发现 stackoverflow 在研究无数其他问题时非常宝贵,但我在这个问题上遇到了困难。我确信解决方案很简单,可以通过多种方式处理。如果我没有正确格式化或提出问题,我深表歉意。

HTML

    <div id="message">
    <a id="date"  href="ajax1.php?postreply=1368479602">Topic</a>
    </div>

jQuery

ahref="";
timestamp="";
time="";

$(document).ready(function(){

$('a').click(function(){
    ahref = $(this).attr('href');
    timestamp = ahref.split('=');
    time = timestamp[1];

    alert(time); //this works       
})

alert(time) //this does not work

$.post('ajaxpost.php', {'timestamp' : time} , function(result) {;
    alert(result);
    })
})


</script>

我能够将 href 解析为一个数组,并将数组中的第二个值设置为时间变量,但是我无法将该变量传递给发布请求。发布请求有效,但仅当我在点击事件之外设置变量时。我在这里研究了其他帖子,我认为答案是使用全局变量,尽管我现在明白这不是好的做法,但这似乎不是解决方案,尽管我可能没有正确声明变量。

4

3 回答 3

1

将 Ajax 请求移动到 click 事件内部。

$(document).ready(function () {

    $('a').click(function () {
        ahref = $(this).attr('href');
        timestamp = ahref.split('=');
        time = timestamp[1];
        $.post('ajaxpost.php', {
            'timestamp': time
        }, function (result) {;
            alert(result);
        })
    })
    alert(time); //this works       
})

当页面为空时第一次加载时,将运行不起作用的警报。但是当您单击事件被触发时,您正在为其分配值。

因此,您需要将请求移动到 Click 事件内部,以便将正确的时间值传递给请求。

于 2013-05-18T03:04:23.540 回答
1

为什么它会起作用?click 事件处理程序time仅在调用时设置。绑定后不会立即调用它。

将依赖于该变量的代码放入回调中:

$(document).ready(function() {
    $('a').click(function() {
        var timestamp = this.href.split('=');
        var time = timestamp[1];

        $.post('ajaxpost.php', {
            'timestamp': time
        }, function(result) {
            alert(result);
        });
    });
});

另外,要小心省略var. 没有声明的 JavaScript 变量var会自动绑定到全局范围,这很少是您想要的,并且可能会导致问题。

于 2013-05-18T03:04:53.553 回答
0

如果将锚标记与单击功能绑定并正确设置 json 数据对象,则必须阻止锚标记的默认功能。json 键没有用单引号或双引号引起来。

确切的解决方案是

$(document).ready(function(){

$('a').click(function(e){
    e.preventDefault();
   var ahref = $(this).attr('href');
   var  timestamp = ahref.split('=');
   var time = timestamp[1];

    alert(time); //this works       
    $.post('ajaxpost.php', {timestamp : time}
           , function(result) {
         alert(result);
    });
});

});
于 2013-05-18T04:03:26.117 回答