2014-02-06 43 views
-1

我有一个简单的脚本来获取PHP session用户ID到一个JavaScript文件。但是,当我尝试简单地提醒用户ID时,它表示undefined变量未定义,虽然正确赋值我认为

如代码所示,我试着用简单的警报来检查从脚本返回的数据,它是正确的。

var user_id; 

$.get("/ajax/actions/getUserId.php", function(data) { 

    // alert(data); <-- this works correctly 

    var user_id = data; 

}); 

alert(user_id); 

有没有更好的方法来做到这一点?

访问(getUserId.php)的PHP文件很简单:

session_start(); 

echo $_SESSION[user_id]; 
+0

在您的ajax调用完成之前您的警报正在运行,因此警报运行时未定义user_id。 –

+1

您还有一个范围问题,在回调中重新定义'user_id' var。 –

回答

2

你应该使用:

$.get("/ajax/actions/getUserId.php", function(data) {  
    var user_id = data; 
    alert(user_id); 
}); 

Ajax是异步默认。

在您的片段代码经过以下步骤:

  1. 定义user_id变量称为全球词汇范围
  2. 制作GET Ajax请求/ajax/actions/getUserId.php
  3. 警报变量user_id的值是undefined(默认情况下,您没有设置任何值)。
  4. 在给定点的AJAX请求成功完成,您的回调函数被调用这样:
    1. 你在你的回调
+0

谢谢,我不能在ajax调用之外使用变量user_id吗?我在调用之后使用alert,因为我需要js文件中的变量 - 或者用英文,我可以在文件加载之前发生ajax调用吗? –

+0

我包括额外的解释,你可以查看它。 –

+0

@DarrenSweeney你可以只留下第二个变量声明 - ajax回调中的一个。 –

2

阿贾克斯的词汇范围,定义一个名为user_id新的变量,是异步的,所以最后的警报将在调用ajax的回调函数之前执行。

相关问题