【发布时间】:2012-03-09 20:26:52
【问题描述】:
这感觉像是一个很菜鸟的问题,但到底是什么。我正在处理一个PhoneGap 项目并且遇到了一些问题。 我遵循了一个带有 ajax 的小型 twitterfeed 教程(http://wiki.phonegap.com/w/page/42450600/PhoneGap%20Ajax%20Sample),它就像一个魅力。但是,我正在编写一个用于登录、注销等的小型 API,我几乎可以让它工作。
我将解释我的问题: 例如,我设置了一个 BOOL 变量“b”来确定用户是否登录。
var b = Do_Ajax('isloggedin');
这个函数看起来几乎是这样的:
function Do_Ajax(what)
{
var ajax = new XMLHttpRequest();
if(what == "isloggedin")
{
ajax.open("GET", root() + "/?isloggedin",true);
ajax.send();
}
//Get the results back
ajax.onreadystatechange=function()
{
if(ajax.readyState==4 && (ajax.status==200||ajax.status==0))
{
eval('var data = ' + ajax.responseText + ';');
var theResults = data.results;
if(data['BOOL'] != null )
{
return data['BOOL'];
}
}
}
}
如果我现在尝试对这个变量 (b) 发出警报,我会得到“未定义”。如果我将“return”更改为“alert”(我打印“return data['BOOL'];” - php 返回一个 json 字符串),我将获得 true 或 false 值。如果我然后在函数中对 b 变量和警报有警报 - b 变量首先警报,然后 data['BOOL'] 警报。
所以问题是函数在获取数据之前返回 undefined。我怎样才能让函数“等待”返回这个值,直到它运行了 onreadystatechange 的东西?
编辑:解决它的一种方法是在函数外部声明一个变量,例如“var IsUserOnline = false;”然后在完成请求时在函数中设置“IsUserOnline = data['BOOL']:”,然后在代码中只使用这个变量。但是,不,我认为回归思维是最好的。我认为我的代码将来会非常混乱,因为我将通过此功能获取/发布更多内容。也许只是我的想法现在真的错了?
【问题讨论】:
标签: javascript ajax function cordova