我不是JavaScript的专业人士,我已经在互联网上搜索了很长时间。
我在从另一个函数获取变量时遇到了问题。我的代码如下所示:
var variabeltje;
$.post('js/ajax/handle_time.php', {'time': $(this).find('input').val()},
function(data) {
alert(data);
variabeltje=data;
}
);
alert(window.variabeltje);变量variabeltje必须从数据中获取信息。当我将警报放在variabeltje=data下面时,它正在工作,但我需要函数后面的数据变量。
编辑:
我把它改成了人们所说的,我现在有了:
var XHR = $.post('js/ajax/handle_time.php', {time: $(this).find('input').val()});
XHR.done(function(data) {
console.log(data);
getData(data);
});
function getData(data) {
if(data == 'true') {
alert(data);
$(this).unbind('keypress');
$(this).html($(this).find('input').val());
}
}但是现在$(this)没有传递到函数中。我该如何解决这个问题呢?
发布于 2012-10-30 21:11:03
因为它是异步的,所以数据只有在ajax调用完成后才可用,所以您必须修改代码以使用它,并等到ajax完成后再执行您的操作:
var XHR = $.post('js/ajax/handle_time.php', {time: $(this).find('input').val()});
XHR.done(function(data) {
console.log(data);
});或者在其他函数中:
function XHR(time){
return $.post('js/ajax/handle_time.php', {time: time});
}
function doStuff(element) {
XHR($(element).find('input').val()).done(function(data) {
console.log(data);
});
}编辑:
根据您的编辑,它看起来像是一个作用域问题:
var self = this,
XHR = $.post('js/ajax/handle_time.php', {time: $(self).find('input').val()});
XHR.done(function(data) {
console.log(data);
getData(data);
});
function getData(data) {
if(data == 'true') { //normally you'd try to pass true as a boolean, not string
alert(data);
$(self).unbind('keypress').html($(self).find('input').val());
}
}发布于 2012-10-30 21:01:49
这是因为$.post方法异步运行。
请在SO上看看this question。
编辑:您可以更改代码,并将post方法后的部分放入成功触发的匿名函数的主体中。如下所示:
$.post('js/ajax/handle_time.php', {'time': $(this).find('input').val()},
function(data) {
alert(data);
variabeltje=data;
alert(window.variabeltje); // or whatever function you need to call, call it here...
}
);发布于 2012-10-30 21:01:32
问题是post方法是异步执行的。这就是说,post被发送到服务器,但执行流程仍在继续,因此您的警报正在尝试访问一个未设置的值,因为post尚未返回。
如果需要同步执行,可以使用ajax方法。
https://stackoverflow.com/questions/13139522
复制相似问题