我试图了解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);
但似乎没有什么能给我我想要的数据。我错了什么?
答案 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;。