使用ajax回调

时间:2017-07-09 15:51:21

标签: javascript jquery ajax

我想在从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时,它会显示我想要显示的内容,但浏览器会告诉我调用(回调)是否不是函数。提前致谢

3 个答案:

答案 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;
&#13;
&#13;