gpt4 book ai didi

jQuery get 函数返回 true/false

转载 作者:行者123 更新时间:2023-12-03 23:02:10 26 4
gpt4 key购买 nike

$(document).ready(function(){
//global vars
var name = $("#username");
var email = $("#email");


function usernameExists() {
$.get("register.php",{ check: 1, username: name.val(), email: email.val() } ,function(m) {
if(m==1) {
return false;
} else {
return true;
}
});
}
});

当调用此函数时,Firebug 显示了正确的响应,但它没有返回任何内容...(此 $.get(...) 函数已在函数 usernameExists() 之外进行了测试,但没有返回,并且工作完美)。

问题是什么以及如何解决?

<小时/>
     $(document).ready(function(){
//global vars
var form = $("#register");
var name = $("#username");
var email = $("#email");

$.get("register.php",
{ check: 1, username: name.val(), email: email.val() },

// Have this callback take care of the rest of the submit()
function(m) {
if(m==1) {
form.submit(function(){ return false; });
} else {
form.submit(function(){
if(validateName() & validateEmail() & validatePass1() & validatePass2())
return true
else
return false;
});
}

}
);

function validateName(){
// some check here
}

// and other functions

});

最佳答案

您调用的函数不会返回任何内容。

即使它确实尝试从您的 $.get() 返回响应,它也不会工作,因为调用是异步的,所以当收到响应时,无论代码是什么使用返回值的函数可能已经执行了。

您需要做的是从 $.get() 回调中调用您的代码。

function usernameExists() {
$.get("register.php",{ check: 1, username: name.val(), email: email.val() } ,function(m) {
someOtherFunction(m==1);
});
}

function someOtherFunction(parameter) {
// The parameter will be true or false
// depending on the value of m==1
}
<小时/>

根据您的评论进行更新。

最好将 $.get() 放入 submit() 中,但要忠于您最初的想法,这就是它的样子。

form.submit(function(){
// After usernameExists() is called, we need to hand off
// the rest of the execution to that function since
// this one will be done executing before the get()
// response is received
usernameExists();
return false;
});

function usernameExists() {
$.get("register.php",
{ check: 1, username: name.val(), email: email.val() },

// Have this callback take care of the rest of the submit()
function(m) {
if(m==1) {
// do something if true
} else {
// do something if false
}
}
);
}
<小时/>

同步 JavaScript 与异步 JavaScript 的优点说明

Javascript 代码通常同步执行。这仅意味着它一次执行一行,或者一行必须完成执行才能触发下一行。

var greeting = "hi there";  // set the greeting variable

alert( greeting ); // the alert won't fire,
// until the previous line finished successfully

这使得事情变得非常美好且可预测。但该规则也有一些异常(exception)。一个值得注意的异常(exception)是 AJAX 调用。

您的 $.get() 是 AJAX 调用的示例。 AJAX 中的“A”代表异步,这意味着它不会阻止下一行代码的执行。

后果是,当您执行需要(例如)1 秒才能完成的 $.get() 时,无论 $.get() 之后出现什么代码当 $.get() 收到响应时,> 早已完成。

以前面的 greeting 为例,但这次使用 AJAX。

var greeting;  // will hold the response from our AJAX call

$.get('some/path/to/data.php',
function( m ) {
greeting = m; // populate the greeting variable with the data returned
}
);

alert( greeting ); // Will alert "undefined" instead of the data that was returned
// because the $.get() code above is asynchronous, which allows
// the code below it (the alert in this case) to continue
// executing.

如您所见,alert(greeting) 早在收到 $.get() 响应之前就已经执行了,因为他 $.get () 是异步的,在等待数据时不会暂停执行链。

要解决此问题,您可以将 alert() 放在 $.get() 的回调中,这样它就不会'直到收到响应才运行。

var greeting;  // will hold the response from our AJAX call

$.get('some/path/to/data.php',
function( m ) {
greeting = m; // populate the greeting variable with the data returned
alert( greeting ); // Now the alert will give the expected result
// because it is in the callback.
}
);

结果是,在您的代码中,一旦您调用 $.get(),任何依赖于收到的响应的剩余代码都应该发生在回调内部

将代码放置在回调外部的唯一方法是将其放置在自己的函数中,该函数从回调内部调用(就像我对原始代码所做的那样)答案)。

<小时/>

代码应如何运行的基本布局:

请记住,usernameExists() 不一定需要单独的函数。您可以将所有代码放在 submit()

form.submit(function() {
// Check to make sure input is valid **before** you send the AJAX
if(validateName() & validateEmail() & validatePass1() & validatePass2()) {
usernameExists(); // If valid, continue with the usernameExists()
}
return false; // We return false whether or not the content was valid,
// in order to prevent the form from submitting prematurely
});

function usernameExists() {
$.get("register.php",
{ check: 1, username: name.val(), email: email.val() },

// Have this callback take care of the rest of the submit()
function(m) {
// If "m" is less than one, there were no existing users
// so we can go ahead and post the data to the server
if( parseInt(m) < 1 ) {
// Here, you would need to manually do a post to
// submit the data to the server
$.post(url, data, callback, datatype );
}
}
);
}

http://api.jquery.com/jquery.post/

关于jQuery get 函数返回 true/false,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3105425/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com