JQuery单击事件未将变量传递给post请求

时间:2013-05-18 03:02:01

标签: jquery post click

我是一个“第一次定时器”和“自学成才”,但在研究无数其他问题时发现了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解析为数组,并将数组中的第二个值设置为时间变量,但是我无法将该变量传递给post请求。 post请求有效但仅当我在click事件之外设置变量时。我在这里研究了其他帖子,我认为答案是使用全局变量,即使我现在明白这不是好习惯,但这似乎不是解决方案,尽管我可能没有正确地声明变量。

3 个答案:

答案 0 :(得分: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事件内部,以便将正确的时间值传递给请求。

答案 1 :(得分: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。声明没有var的JavaScript变量会自动绑定到全局范围,这很少是您想要的并且可能会导致问题。

答案 2 :(得分:0)

如果使用click函数绑定它并且使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);
    });
});

});