Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 函数不返回值_Javascript_Dojo - Fatal编程技术网

Javascript 函数不返回值

Javascript 函数不返回值,javascript,dojo,Javascript,Dojo,我无法从这个函数中获取值,我不知道为什么,但返回空值。我用firebug调试它,它运行了两次,第一次返回空,第二次返回值 你知道我该怎么纠正吗 function validation() { if (val()); { alert("Error"); } else { alert("Pass"); } } function val() { var answer; dojo.xhrGet({ url: "Va

我无法从这个函数中获取值,我不知道为什么,但返回空值。我用firebug调试它,它运行了两次,第一次返回空,第二次返回值

你知道我该怎么纠正吗

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())