如果我有数据验证,我在这里遇到问题。更多的函数$ ajax jquery没有返回true和false的值,知道我怎么能解决这个问题?
function ret(as){
....codes...
$.ajax({
type: "POST",
url: "../../03",
data: "as="+as,
success: function (msg) {
if(msg == 'true' ){
..codes..
return true;
}else{
..codes..
return false;
}
}
});
}
示例电话:
var check= ret("user");
if(check== true){
..run ..
}
答案 0 :(得分:2)
默认情况下,ajax调用是异步的 - 实际上是'A'代表的。这意味着你的ret函数将在调用success函数之前返回。您有两种方法可以解决问题:
反转控制流,以便在调用成功回调时发生所需的行为。您可以通过将函数传递给ret:
来完成此操作function(as,successHandler){ ...
success: function(msg) {
successHandler(msg == 'true');
}
答案 1 :(得分:1)
用户想要在jQuery对象之外传输true / false响应,以便该函数可以返回它。有些情况下你真的需要函数来返回一些东西而不是调用回调。
即使jQuery调用是同步的(即'async:false'),上面的示例代码也不起作用,但是你的调用必须明确指定为同步。
正确的方法是将jQuery对象附加到变量:
var obj = jQuery.ajax({ 'async:false', (...)
然后,在函数结束时,在jQuery对象右括号后,添加到函数中:
return obj.responseText;
答案 2 :(得分:0)
Ajax是异步的。你不能使用返回值。您必须使用回调:
ret("user", function(check) {
if (check == true)
.. run ..
});
您可以像这样实施ret
:
function ret(as, callback) {
....codes...
$.ajax({
type: "POST",
url: "../../03",
data: "as="+as,
success: function (msg) {
if(msg == 'true' ){
..codes..
callback(true);
}else{
..codes..
callback(false);
}
}
});
}
另一种选择是强制请求同步,但这并不是真正的惯用方法。