希望通过ajax检查值以进行验证。我的功能获得了true
或false
。但无法返回对函数callback_validation
的响应。
当我在下面调用函数时,它返回undefined.
console.log(callback_validation('value',<object>)); /* here its returning undefined */
以上函数应该返回 TRUE 或 FALSE 。
在此处找到我的动作javascript功能:
function callback_validation($val,$field){
var $jObj=[],$data={
ci: $ci,
ui: $ui
};
$data[$field.attr('name')]=$val;
$jObj.push($data);
console.log(JSON.stringify($jObj)); /* CONSOLE OUTPUT: [{"ci":"","ui":"4934","refno":"s"}] */
$.ajax({
url: $url,
type: 'post',
dataType: 'json',
success: function (res) {
/* console.log(res.valid); */ /* here its returning true / false */
return res.valid;
},
data: $data,
error: function(xhr, desc, err) {
console.log(xhr);
console.log('Details: ' + desc + '\nError:' + err + '\n');
return false;
},
cache: false
});
}
答案 0 :(得分:2)
AJAX是异步的意思是你不能从callback_validation
返回一个取决于AJAX调用结果的值。原因是因为success
回调(这是你知道值的唯一地方)可以在函数返回后执行很多。
所以我建议你开始使用异步模式并让你的函数接受回调而不是返回一个值:
function callback_validation($val, $field, resultCallback) {
var $jObj=[], $data={
ci: $ci,
ui: $ui
};
$data[$field.attr('name')]=$val;
$jObj.push($data);
$.ajax({
url: $url,
type: 'post',
dataType: 'json',
success: function (res) {
resultCallback(res.valid);
},
data: $data,
error: function(xhr, desc, err) {
console.log(xhr);
console.log('Details: ' + desc + '\nError:' + err + '\n');
resultCallback(false);
},
cache: false
});
}
现在您可以像这样调用您的函数:
callback_validation('value',<object>, function(result) {
console.log(result); // this will print true or false
});
如果您正在进行AJAX调用,那么您应该习惯的异步编程模式。