Javascript 函数不';不返回任何内容(异步?)
我正在尝试将XPATH求值添加到表单中。当用户填写XPATH时,将使用AJAX在服务器上对其进行评估,然后返回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
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)