Javascript 函数不返回值
我无法从这个函数中获取值,我不知道为什么,但返回空值。我用firebug调试它,它运行了两次,第一次返回空,第二次返回值 你知道我该怎么纠正吗Javascript 函数不返回值,javascript,dojo,Javascript,Dojo,我无法从这个函数中获取值,我不知道为什么,但返回空值。我用firebug调试它,它运行了两次,第一次返回空,第二次返回值 你知道我该怎么纠正吗 function validation() { if (val()); { alert("Error"); } else { alert("Pass"); } } function val() { var answer; dojo.xhrGet({ url: "Va
function validation() {
if (val()); {
alert("Error");
} else {
alert("Pass");
}
}
function val() {
var answer;
dojo.xhrGet({
url: "ValodS?option=12",
handleAs: "text",
load: function (response) {
if (response == 'Pass') {
answer = false;
} else {
answer = true;
}
}
});
return answer;
}
你有一个额外的;在您的
if
将第一行从
if (val());
到
当val返回时,
answer
未分配。您正在调用发送http请求的异步操作。然后,控制流继续进行,当http请求最终完成时,您定义的分配应答的匿名函数将被执行。问题在于,您在应答被发送之前就返回了应答(AJAX请求在后台运行,而不阻塞调用代码)
最简单的解决方案是让调用者将回调函数传递给您的函数。然后您可以在load
处理程序中调用回调函数(从而以这种方式传递数据).您无法从…返回来自…的异步请求的结果。因为AJAX调用是异步的。您能给我一个例子吗,我有点困惑。如果同步发出GET请求是可以接受的,您可以添加sync:true
传递到dojo.xhrGet
的对象。这将允许设置answer
变量将在请求的load
回调中设置,并将在val()
结束时返回。这很可能不是最好的方法,但对于您的使用,正如其他人所提到的,异步请求(您当前拥有的)会工作得更好(但在加载回调之外,它不能回答),这可能是将sync设置为true时的问题;
if (val())