我是一个“第一次定时器”和“自学成才”,但在研究无数其他问题时发现了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事件之外设置变量时。我在这里研究了其他帖子,我认为答案是使用全局变量,即使我现在明白这不是好习惯,但这似乎不是解决方案,尽管我可能没有正确地声明变量。
答案 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);
});
});
});