我用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不是我的力量(还)。
答案 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的总体目标将丢失