JavaScript从函数中获取变量。
JavaScript从函数中获取变量。
我不是JavaScript的专业人士,我在互联网上搜索了很长时间。我在获取另一个函数的变量时遇到了问题。我的代码如下:\n
var variabeltje; $.post('js/ajax/handle_time.php', {'time': $(this).find('input').val()}, function(data) { alert(data); variabeltje=data; } ); alert(window.variabeltje);
\n变量variabeltje
必须从data中获取信息。当我将alert放在variabeltje=data
下面时,它可以工作,但我需要在函数之后使用data变量。\n编辑:\n我已经按照别人的建议进行了更改,现在我的代码如下:\n
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()); } }
\n但现在$(this)没有传递到函数中。我该如何解决这个问题?
问题的原因是post
方法异步执行。这意味着在向服务器发送post请求时,执行流程会继续,因此你的alert尝试访问一个尚未设置的值,因为post还没有返回。
如果你需要同步执行,你可以使用ajax
方法。
这是因为$.post方法是异步运行的。
请参考SO上的这个问题。
编辑:你可以改变你的代码,将post方法之后的部分放在成功触发的匿名函数体内。如下所示:
$.post('js/ajax/handle_time.php', {'time': $(this).find('input').val()}, function(data) { alert(data); variabeltje=data; alert(window.variabeltje); // 或者任何你需要调用的函数,在这里调用它... } );
问题的出现原因是由于ajax调用是异步的,所以数据只有在ajax调用完成后才可用,因此需要修改代码以适应这种情况,并等待ajax完成后再执行相关操作。
解决方法之一是在ajax调用的.done()函数中处理数据:
var XHR = $.post('js/ajax/handle_time.php', {time: $(this).find('input').val()}); XHR.done(function(data) { console.log(data); });
另一种解决方法是将ajax调用封装成一个函数,并在其他函数中调用该函数:
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') { alert(data); $(self).unbind('keypress').html($(self).find('input').val()); } }
非常感谢。还有一个问题,当我将$(this).html($(this).find('input').val())放在函数中时,如何将$(this)传递给XHR.done()函数?
你需要弄清楚作用域以及this指向的是什么,然后如果需要,可以使用一个变量或将其传递给函数,就像处理其他变量一样,以避免作用域问题。