我正在将ajax技术与php结合使用,我想知道如何从onreadstatechange调用的函数中获取返回变量。
一个java函数被调用onsubmit然后调用一个php脚本来验证我的数据库中的一些东西,并根据结果返回true或false。
这是我遇到问题的地方,我希望onsubmit =“return snappyajaxfunction()”根据php的结果返回false或true。
我的问题是,如何从stateChanged函数中获取false或true的结果,以成为snappyajaxfunction的返回值。
我尝试过这样做:kick = request.onreadystatechange = StateChanged没有运气。
我还尝试将responsetxt保存到全局变量,然后在snappyajaxfunction中返回全局变量,没有运气。
snappyajaxfunction()
{
request.onreadystatechange=stateChanged;
request.open("GET",url,true);
request.send(null);
return result;
}
function stateChanged()
{
if (request.readyState==4)
{
return request.responseText;
}
}
这样做的目的是验证用户使用我的数据库中存储的用户名/密码输入的用户名/密码。如果它们不匹配则返回false并且表单将不会提交,如果表单提交并且用户被带到欢迎页面...
答案 0 :(得分:1)
你可以这样做:
function stateChanged()
{
if (request.readyState==4)
{
OnStateChanged(request.responseText);
}
}
其中OnStateChanged
是一个充当事件处理程序的函数......
编辑:在OnStateChanged
中,您可以根据回复提交或不提交表单
EDIT2:当您检查u / p时在服务器上,如果它们正确,请立即登录用户并将状态返回给JavaScript ..然后在JavaScript中而不是重新提交表单,只需重新加载/重定向页面如果成功或显示警告,否则......
通过异步操作从函数中返回一些东西是不可能的......执行的原始线程早已不复存在。异步操作由另一个线程执行(如果我没记错的话,请不要火焰)。
由于
答案 1 :(得分:1)
jQuery不会自动修复他试图根据异步请求的结果提交提交的事实。
您可以做的是:
1)将表单设置为onsubmit以简单地调用snappyajaxfunction();
2)在stateChanged中,如果readystate为4,则获取对表单的引用并执行以下操作:
form.onsubmit = function() { return true; };
form.submit();
基本上 - 将onsubmit设置为始终返回true,然后强制它再次提交。为了增加可用性,您可能希望在等待statechanged发生时禁用导致提交的按钮。然后重新启用它。
答案 2 :(得分:0)
答案 3 :(得分:0)
问题是ajax调用是异步的。这意味着响应与请求分开。您必须修改代码才能处理它。你不能(不应该)使http调用同步。
看看这段代码。它有效,你将能够阅读回复:
var req = new XMLHttpRequest();
req.open('GET', url, true);
req.onreadystatechange = function (ev) {
if (req.readyState == 4) {
alert(req.responseText);
}
};
req.send(null);
答案 4 :(得分:0)
为了使你的代码工作,你可以使用闭包并将函数作为参数传递。
2属性javascript非常擅长。
snappyajaxfunction(url, fn)
{
var request...
request.onreadystatechange=function()
{
if (request.readyState==4)
{
fn(request.responseText);
}
};
request.open("GET",url,true);
request.send(null);
}
使用它可以构建像
这样的函数var doSomething = function(response){
alert(response);
};
snappyajaxfunction('/country/code/32', doSomething);
闭包允许'request'在处理onreadystatechange的函数中可用。 函数'fn'作为snappyajaxfunction的参数传递。