gpt4 book ai didi

php - 数据在 Titanium 中返回为 "undefined"

转载 作者:行者123 更新时间:2023-11-29 23:51:23 24 4
gpt4 key购买 nike

我正在开发一个适用于 iPhone 的基本身份验证移动应用程序,使用:

钛 v.3.23

XAMPP 作为我的本地服务器和 PHP

MySQL 作为本地数据库

我正在开发的应用程序基于以下教程:

http://code.tutsplus.com/tutorials/titanium-user-authentication-part-1--mobile-3728

我能够毫无问题地从教程中启动并运行代码,该应用程序允许我将用户名/密码 key 发布到本地数据库,使用该 key 登录,并将信息显示在我的主窗口上.

我开始操作代码以反射(reflect)我正在尝试构建的更多内容,一个基于单个窗口的应用程序(不像教程中那样基于选项卡),它允许我创建用户名/密码 key ,登录到主窗口窗口,并在该主窗口上向我显示我的信息。

我已成功修改代码,以允许我在本地数据库中创建新的用户名/密码,并让应用程序在登录时验证用户名/密码是否匹配。但是,当我登录主屏幕时,它显示我的用户名和密码“未定义”。为了检查错误,我在当前保存工作代码的项目中输入了相同的用户/密码,并且它是可见的。所以我知道我当前的 PHP 和数据库都工作正常。

目前,我的 app.js 是:

setTimeout (function() {

var login;
login = require ('login');
login.LogIn();

var mainWin = Titanium.UI.createWindow();

Ti.App.addEventListener('grantEntrance', function(event){

mainWin.title = 'Welcome ' + event.name;
mainWin.url = 'main.js';
mainWin.name = event.name;
mainWin.email = event.email;

});

}, 2000);

setTimeout 函数最终将成为一个启动屏幕,我独立于上面的教程添加了它。我还更改了“main”项目以反射(reflect)我的 mainWin,而不是教程中所示的“main”。

目前,我的login.js是:

function LogIn(){

var loginWin = Ti.UI.createWindow({
backgroundColor:'white'
});

var username = Titanium.UI.createTextField({
color:'#336699',
top:10,
left:10,
width:300,
height:40,
hintText:'Username',
keyboardType:Titanium.UI.KEYBOARD_DEFAULT,
returnKeyType:Titanium.UI.RETURNKEY_DEFAULT,
borderStyle:Titanium.UI.INPUT_BORDERSTYLE_ROUNDED
});
loginWin.add(username);

var password = Titanium.UI.createTextField({
color:'#336699',
top:60,
left:10,
width:300,
height:40,
hintText:'Password',
passwordMask:true,
keyboardType:Titanium.UI.KEYBOARD_DEFAULT,
returnKeyType:Titanium.UI.RETURNKEY_DEFAULT,
borderStyle:Titanium.UI.INPUT_BORDERSTYLE_ROUNDED
});
loginWin.add(password);

var loginBtn = Titanium.UI.createButton({
title:'Login',
top:110,
width:90,
height:35,
borderRadius:1,
font:{fontFamily:'Arial',fontWeight:'bold',fontSize:14}
});
loginWin.add(loginBtn);

var createLabel = Titanium.UI.createLabel({
text:'Create Profile',
bottom: 25,
left:25
});
loginWin.add(createLabel);

var indicatorWin = Ti.UI.createView({
width: 320,
height: 480,
backgroundColor: '#000000',
opacity: 0.5
});

var acctInd = Ti.UI.createActivityIndicator({
height:50,
width:50,
style: Titanium.UI.createActivityIndicatorStyle.Plain,
top:250,
left:130
});

var actLabel = Titanium.UI.createLabel({
text: 'Checking Login Details',
color: '#FFFFFF',
left:70,
top:200,
height:50

});

indicatorWin.hide();
acctInd.hide();
actLabel.hide():

loginWin.add(indicatorWin);
indicatorWin.add(acctInd);
indicatorWin.add(actLabel);

var loginReq = Titanium.Network.createHTTPClient();

loginReq.onload = function()
{
var json = this.responseText;

var response = JSON.parse(json);

if (response.logged == true)

{
username.blur();
password.blur();

Ti.App.fireEvent('grantEntrance', {
name:response.name,
email:response.email
});
loginWin.close();
var main;
main = require ('main');
main.MainM();
}
else
{
alert(response.message);
}
};

loginBtn.addEventListener('click',function(e)

{
if (username.value != '' && password.value != '')

{

loginReq.open("POST","http://localhost/Tuts/post_auth.php");

var params = {
username: username.value,
password: Ti.Utils.md5HexDigest(password.value)
};

loginReq.send(params);

indicatorWin.show();
acctInd.show();
actLabel.show();
}
else
{
alert("Username/Password are required");
}
});

createLabel.addEventListener('click', function(e) {
var ProfileWin, ProfileInc;
ProfileInc = require ('createProfile');
ProfileWin = new ProfileInc.CreateP();
ProfileWin.open();
});

loginWin.open();
return ;loginWin;
}
exports.LogIn=LogIn;

目前,我的 main.js 是:

function MainM(){

var mainWin = Ti.UI.createWindow({
backgroundColor:'white'
});

var msg = Titanium.UI.createLabel({
text:"\n\nYour email is:\n" + mainWin.email + "\n\nyour name is:\n" + mainWin.name,
top:10,
left:10,
width:300,
height:'auto'
});
mainWin.add(msg);

mainWin.open();
return ;mainWin;
}
exports.MainM=MainM;

如您所见,我对应用程序的实际数据库部分没有进行太多更改(如果有的话)。这就是为什么我很困惑它不起作用。我发现的唯一研究表明异步请求可能存在问题,并且听说通过使用 setTimeout 函数我可能能够解决我的错误。我尝试在几个地方插入该函数,但错误仍然存​​在。

抱歉这么久了,我已经为此工作了一个月,我想尽可能详细。

感谢您的帮助!

最佳答案

在您的代码中,主屏幕是一个新窗口,它无权访问变量电子邮件和名称。

要获取最小胜利中的值,您可以将它们保存在 Properties 中并使用它们,或者修改你的 main.js 。

关于php - 数据在 Titanium 中返回为 "undefined",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25633287/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com