我想在从ajax获取值之前阻止函数执行,我尝试使用async:false它可以工作但不推荐使用。所以,我使用回调就像我在互联网上找到的那样。它也可以工作,但是浏览器仍然会告诉我回调是不是函数。这是我的代码
function User() {
this.nama;
this.nis;
this.pass;
this.role;
this.url = "http://localhost/elearning-web/";
this.Login = function(call) {
$.ajax({
type:"POST",url:this.url+"dologin.php",data:"nis="+this.nis+"&pass="+this.pass,
success:function(e){
call(e);
}
});
}
}

当我检查console.log时,它会显示我想要显示的内容,但浏览器会告诉我调用(回调)是否不是函数。提前致谢
答案 0 :(得分:2)
要传递给方法call
的{{1}}参数必须是一个函数,例如:
Login
答案 1 :(得分:2)
使用Promise API已经可以实现你想做的事了,是的,jQuery也支持它。
您只需更改Login
功能,如下所示:
function User() {
// .. other code truncated for brevity
this.Login = function() {
return $.ajax({
type: 'POST',
url: 'your_url'
// Note that `success` function has been removed from here
});
}
}
现在这解决了很多问题。首先,User.Login
的调用者不需要传递回调函数。登录功能可以像这样使用:
var user = new User();
user.Login()
.then(function(e) {
// `e` is accessible here
});
其次,可以有无限数量的.then()
相互链接,提供更好的代码可读性。
第三,您不需要将回调验证为函数,因为.then
接受函数作为其参数(免费验证它)。
第四,jQuery不推荐使用success
回调。 .then()
使用新语法。
答案 2 :(得分:0)
你必须声明一个调用函数,将它传递给User.Login(call);
function call1(e) {
console.log('Hi, from call ', e);
}
function User1() {
this.Login = function(call) {
// simulating $.ajax http request ;]
setTimeout(function() {
call(';)');
}, 2000);
}
}
var user1 = new User1();
user1.Login(call);
// in your case
function call(e) {
console.log('Hi, from call ', e);
}
function User() {
this.nama;
this.nis;
this.pass;
this.role;
this.url = "http://localhost/elearning-web/";
this.Login = function(call) {
$.ajax({
type:"POST",
url:this.url+"dologin.php",
data:"nis="+this.nis+"&pass="+this.pass,
success:function(e){
call(e);
}
});
}
}
var user = new User();
user.Login(call);

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
&#13;