Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/446.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/85.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_Jquery_Ajax - Fatal编程技术网

Javascript 函数不';不返回任何内容(异步?)

Javascript 函数不';不返回任何内容(异步?),javascript,jquery,ajax,Javascript,Jquery,Ajax,我正在尝试将XPATH求值添加到表单中。当用户填写XPATH时,将使用AJAX在服务器上对其进行评估,然后返回true或false 问题在于,此函数似乎总是返回未定义的。我想这是因为JS的异步行为,所以我使用了$。当时,它没有帮助 function evalXpath(xpath) { var test = $.post('/api/test-xpath/', {'xpath': xpath}); test.done(function (data) { conso

我正在尝试将XPATH求值添加到表单中。当用户填写XPATH时,将使用AJAX在服务器上对其进行评估,然后返回
true
false

问题在于,此函数似乎总是返回
未定义的
。我想这是因为JS的异步行为,所以我使用了
$。当
时,它没有帮助

function evalXpath(xpath) {
    var test = $.post('/api/test-xpath/', {'xpath': xpath});
    test.done(function (data) {
        console.log('BEFORE RETURN '+Boolean(data['success']));
        return Boolean(data['success']);
    })
}

$(document).ready(function () {
    $('#id_xpath').on('change', function () {
        var xpath = $("#id_xpath").val();
        $.when(evalXpath(xpath)).done(function (evaluated) {
            console.log('RETURNED '+evaluated);
            $('#xpath-valid').text(evaluated ? 'VALID' : 'INVALID');
        });


    });

});
控制台输出(如您所见,它仍然是异步的):

你有什么想法吗?

你真的很接近了。有几件事:

  • 您忘记从
    evalXpath
    返回承诺

  • 要获得正确的承诺值链接(例如,为了使您的值从
    evalXpath
    内的回调变为它返回的承诺的解析值),请使用
    then
    ,而不是
    done

  • 然后,当使用
    evalXpath
    时,就不需要
    $

  • 因此:

    function evalXpath(xpath) {
        var test = $.post('/api/test-xpath/', {'xpath': xpath});
        return test.then(function (data) {
    //  ^^^^^^      ^^^^
            console.log('BEFORE RETURN '+Boolean(data['success']));
            return Boolean(data['success']);
        })
    }
    
    // ...
    evalXpath(xpath).then(function (evaluated) {
    //               ^^^^ (this one could be `done`, but let's be consistent)