结果未定义为什么?如何解决这个问题呢。赋值变量,我需要在
之前使用该变量<script type="text/javascript">
function getAdvanceAmount (element, callback) {
if (element === '' || !window.XMLHttpRequest) return
var xhr = new XMLHttpRequest()
xhr.onreadystatechange = function () {
if (xhr.status === 200 && xhr.readyState === 4) {
callback(xhr.responseText)
}
}
xhr.open('GET', 'get_advance_amount.php?q=' + element, true)
xhr.send()
}
function get_value()
{
getAdvanceAmount('1',function (karat) {
console.log(karat)
k1=karat;
})
alert(k1);
}
</script>
<button onclick="get_value()">Click</button>
答案 0 :(得分:0)
这里的问题是XMLHttpRequest
是异步请求,所以需要一段时间才能完成,并调用你的回调函数。
另一方面,您在alert
事件触发后立即致电click
,因此尚未触发回调,并将karat
分配给k1
变量。
getAdvanceAmount('1',function (karat) {
console.log(karat)
useKaratValue(karat);
})
function useKaratValue(karat) {
// Make use of the value here...
}
这将解决问题,并在获得karat
值后发出警报。
答案 1 :(得分:0)
如果按照以下方式更改,它会正常工作:
您的密码:
function get_value()
{
getAdvanceAmount('1',function (karat) {
console.log(karat)
k1=karat;
})
alert(k1);
}
按如下方式更改:
function get_value()
{
getAdvanceAmount('1',function (karat) {
console.log(karat)
alert(karat);
})
}
由于这是异步调用,因此警报代码也应该在回调函数中。
为了更好的交叉浏览器兼容性,不仅可以使用IE6 / 7,而且还可以覆盖某些特定于浏览器的内存泄漏或错误,并且还可以通过触发ajaxical请求来减少冗长,可以使用jQuery。
$.get('get_advance_amount.php?q=' + element, function(responseText) {
alert(responseText);
});
希望这会对你有所帮助。
答案 2 :(得分:0)
您正在调用getAdvanceAmount
函数并向其传递一些参数,即一个元素和一个名为callback
的函数。 getAdvanceAmount
发送一个AJAX请求,当收到响应时,执行callback
。 callback
k1
内部已初始化。
执行getAdvanceAmount
后,尝试使用k1
,但是不成功。原因是callback
在尝试使用k1
的值时尚未执行。这就是:
getAdvanceAmount
被称为k1
尝试使用的值callback
k1
您只是在初始化之前尝试按时间顺序使用k1
的值,因为错误的假设是在调用getAdvanceAmount
之后使用它,它负责初始化保证它将被初始化,显然不是这样。尝试在k1
中使用callback
,您会看到它已正确初始化。