访问javascript全局变量失败

时间:2014-03-25 10:31:30

标签: javascript jquery jquery-mobile

我用jquery mobile和phonegap / cordova做我的第一个移动应用程序。一切都很顺利,直到我自己创建页面,但只要我想访问从远程服务器访问的一些变量,它就会在特定的地方失败。我已经尝试了大约30种变体,重新编写相同的代码 - 字面上花了4个小时就已经输出了一个简单的var - 但是没有成功,而我现在只是将剩下的头发拉出来。

这是我的代码片段

我在服务器端有一个html文件,一个js文件和一个php,输出一个json答案

我得到的php回复:

{"item":{"ID":"1","fname":"Kris","lname":"Nagy","email":"myemail@email.com","password":"abc123","role":"1","practice":"0","address":"","city":"","zip":"","phone":""}}

login.js

var userName;
function getUser() {
 $.getJSON( "http://myserver.com/getuser.php?email=myemail@email.com&pass=absc123", function( json ) {
 console.log( "JSON Data: " + json.item.fname );
 console.log( "JSON Data: " + json.item.email );
 // testing if i have the correct data, console outputs the rigth values

 userName =  = json.item.fname;
 window.userName = json.item.fname;
 //trying to assign value to variable

 console.log( "Variable data" + window.userName );
 // testing if i have the correct data stored, console outputs the right value
  });
 }
 getUser();  
 console.log( "test outside function" + window.userName );
 //gives back undefined

index.html(这里我只是试图访问变量,确定我有完整的html,包括js,jquery和所有必需品)

 <script>
 getUser(); //outputs the values to console
 console.log( "test in html" + window.userName ); /*/gives back undefined
 </script>

由于我需要在我的html中使用一些变量,我如何能够在html中输出它们。这个例子尝试进行某种登录,但我的问题更多的是变量,因为我想了解它们。根据我的理解,我在窗口中有全局变量。电话,但看起来似乎只有全局,我需要在整个应用程序中使用变量,所以我必须理解它们。虽然你看来我似乎错过了一点,所以任何帮助都是如此受到赞赏。 我知道如何使用php,但由于最终产品需要在cordova上运行,我在客户端限制为html / js,javascript不是我的力量(还)。

2 个答案:

答案 0 :(得分:1)

您可以从函数返回由ajax请求公开的promise接口:

var userName;

function getUser() {
    return $.getJSON(...);
}
getUser().done(function () {
    console.log("test outside function" + window.userName);
});

答案 1 :(得分:0)

您无法在JSON成功回调之外访问userName,因为您仅在异步方法的成功回调中分配teh值。

console.log( "test outside function" + window.userName ); // it wont work

如果您仍想立即访问,请通过设置其中一个ajax设置async:false进行同步通话,但ajax的总体目标将丢失