回调函数在jQuery中不起作用

时间:2017-02-24 10:34:55

标签: jquery callback

我试图了解Callbacks,但也许我没有得到它。是的,我查看了How to write a jQuery function with a callback?How to return value from an asynchronous callback function?this explanation,并尝试根据示例对我的代码进行建模。我甚至阅读this tutorial,但看起来我无法理解这个概念。或许这只是一些小错误...

仅针对上下文,我正在尝试创建一个简单的登录/注册表单,我确保人们不会两次注册,并在他们未注册时尝试登录时将其发送到注册等。 ..

这是HTML:

<div id="LoginSignup">
    <form>
        <p id="LoginSignupMesg">Signup or Login</p>
        <input type="text" id="LoginID" placeholder="Phone/Email" size="10" value="" />
        <input type="password" id="password" placeholder="Password" size="10" value="" />
        <input type="button" value="Login" id="Login" />
        <input type="button" value="Signup" id="Signup" />
    </form>
</div>

这是我尝试过的许多版本中的一个版本:

var xsl ="";
function idcheck(id, pwd, callback) {
$.ajax("ls.php?l='" + id + "'&p='" + pwd + "'", {
    success: function(data) {
     if (typeof callback === "function") {
        callback(data);
     } else {alert("Not a function!")}
    },
    error: function() {
        alert('The file failed to load!');
    },
    type: 'POST'
});
//  return xsl;
}
function c(d){
   xsl = d;
}
$(document).ready(function() {
    $("#Login").click(function(event) {
        var x = $("#LoginID").val();
        var y = $("#password").val();
        idcheck(x, y, c);
        alert('Login: ' + xsl);
    });
});
$(document).ready(function() {
    $("#Signup").click(function(event) {
        var x = $("#LoginID").val();
        var y = $("#password").val();
        idcheck(x, y, c);
        alert('Signup: ' + xsl);
    });
});

如果我单击“登录”或“注册”按钮,我第一次得到一个空白字符串,如果我之后单击任何一个,我从ajax调用中获取SQLData。一旦数据显示在警告框中,无论我点击多少次都会显示。

我也尝试从idcheck中返回值,正如您在注释掉的行中看到的那样,并且还使用了:

xsl = idcheck(x, y, c);

但似乎没有什么能给我我想要的数据。我错了什么?

2 个答案:

答案 0 :(得分:2)

问题是在获得“idcheck&#39;功能,它将进入下一行(即警报(&#39;登录:&#39; + xsl);),然后进入你的回叫功能&#39; c&#39;。所以第一次收到空信息。下次您将在警报中获得之前的res值。

解决方案是你可以在你的回叫功能中使用这个操作(警告(&#39;登录:&#39; + xsl);)。

答案 1 :(得分:2)

Ajax调用是异步alert('Login: ' + xsl);正在您的成功&#34;之前执行函数,因为服务器当时还没有返回响应。这就是为什么它一片空白。

您要执行的任何依赖于ajax调用返回的数据的操作必须在success函数或由其调用的函数中进行。

我建议你在你的功能中移动alert('Login: ' + xsl);&#34; c&#34;。