2013-05-27 46 views
0

返回布尔我有当前的代码:jQuery的:为什么我不能在功能

<button onclick="ismeloggedin()"> 

脚本:

function ismeloggedin(){ 
    if(checkloggedin()){ 
     alert('you"re logged in'); 
    }else{ 
     alert('you didn"t login!!!!'); 
    } 
} 

function checkloggedin(){ 
    $.post('/test/check/',{'loggedin':0},function(data,status){ 
     return (data.status == 'error')?false:true; 
    }); 
} 

PHP是没有必要的,但无论如何后

function check(){ 
    is(isset($_POST['loggedin'])){ 
     if(isLoggedIn()){ 
      $json = ['status'=>'success']; 
     }else{ 
      $json = ['status'=>'error']; 
     } 
     header('Content-Type: application/json; charset=utf-8'); 
     echo json_encode($json); 
    } 
} 

我得到的问题是checkloggedin()这个函数返回undefined

,而不是返回真/假

+1

它是回调的回报,而不是'checkloggedin'函数。 – Cyclone

+0

这是因为请求是异步的。在回调函数中处理响应,并通常阅读如何在JS中异步/基于事件的工作。 – CBroe

回答

2

jQuery的post功能异步。这意味着你的函数在数据加载之前就会返回,所以没有办法将这个值返回到原始函数。

您必须重新考虑代码的结构,记住数据不会立即可用。例如,当页面加载时,您可以发送请求,然后在完成时(即调用内部函数时),可以相应地修改页面上的内容。

+0

那我该用什么? '$ .ajax'还是其他? –

+0

@jkjk $ .post是一个简写的Ajax函数,相当于: '$ .ajax({'012'},''' –

+0

'不,'ajax'也是异步的,数据来自服务器如果你不知何故找到了一种使其同步的方法,那将会是一个糟糕的用户体验,因为它会在加载时冻结页面,改变你对数据的思考方式 – Dave

0
function GenerateResult(pResult){ 
    if(pResult){ 
     alert('you\'re logged in'); 
    }else{ 
     alert('you didn\'t login!!!!'); 
    } 
} 

function ismeloggedin(){ 
    $.post('/test/check/',{'loggedin':0},function(data,status){ 
     GenerateResult((data.status == 'error')?false:true); 
    }); 
} 
+0

但实际上我需要返回一个值,因为我的脚本有多个情况需要检查是用户登录在 –

+0

@jkjk那么你必须将结果存储在一个变量中,并且只运行你r代码一旦变量被设置(这比创建一个新的HTTP请求神奇 - 多少次更好) – Dave

+0

我把这个函数放在外部的js文件中,我该如何使用变量? –

相关问题