对于android和ios,我们使用来自serviceutility.js
的相同的restful Web服务代码。但是服务受到了冲击,只能在ios中检索值。相同的代码在android中不起作用,我们收到以下错误:
[错误]:TiExceptionHandler :(主要)[2,821093] - 合金/控制器/ home.js:25,32
[ERROR]:TiExceptionHandler :( main)[0,821093] - 消息:未捕获的TypeError:无法读取属性' status'为null
[ERROR]:TiExceptionHandler :( main)[0,821093] - 来源:if(" 1" == response.status)alert(response.message);否则如果(" 0"
[错误]:V8异常:合金/ controllers / home.js发生异常:25:未捕获TypeError:无法读取属性' status' null。
Titanium SDK是5.1.2 GA
exports.login = function(user, cb) {
var response = null;
if (Ti.Network.online) {
var xhr = Ti.Network.createHTTPClient({
timeout : 10000,
validatesSecureCertificate : false
});
xhr.onload = function() {// Onload
var responseTxt = this.responseText == '' ? '{}' : this.responseText;
try {
response = JSON.parse(responseTxt);
cb(response, 'SUCCESS');
} catch(e) {
cb(response, 'ERROR');
}
};
xhr.onerror = function(e) {
if (xhr.status === 0) {
cb(response, 'TIMEDOUT');
} else {
cb(response, 'ERROR');
}
};
url = "https://";
var postData = {
employeeId : user.employeeId,
password : user.password
};
xhr.open('POST', url);
xhr.setTimeout(10000);
xhr.setRequestHeader('employeeId', user.employeeId);
xhr.setRequestHeader('password', user.password);
xhr.send();} else {
cb(response, 'NO_NETWORK');
}};
以下代码适用于index.js文件,其中实际检索值。
if (Ti.Network.online) {
loginUtil.login(user, function(response, status) {
Ti.API.info("status----" + status);
if (response.status == "0") {
Ti.API.info("status== " + response.status);
Ti.App.role = response.role;
Alloy.createController('home', {employeeId:$.userTextField.value,password:$.passwordTextField.value,from:"index"}).getView().open();
} else if (response.status == '1') {
alert(response.message);
} else {
alert("Please enter the correct credentials");
}
});
}
请帮助我们。
答案 0 :(得分:1)
看起来你只返回一个字符串值而不是整个响应对象。然后在您的控制器中,您尝试访问响应对象的.status属性。
//this line returns the string responseTxt
response = JSON.parse(responseTxt);
尝试返回整个响应对象。
response = JSON.parse(this);
然后在index.js控制器中使用/显示状态属性
alert(response.status);
答案 1 :(得分:0)
您的index.js
预期response
是一个对象,但这只是您拨打callback
的情况:
response = JSON.parse(responseTxt);
cb(response, 'SUCCESS');
您致电callback
response
变量null
的所有其他地方都是[RegularExpression("(True|true)")]
public bool TermsAndConditions { get; set; }
,因为这是您在第二行初始化的地方。
答案 2 :(得分:0)
你的回调会返回两个参数:response&状态,第二个参数从未使用过。
通过阅读登录功能代码,您只能访问响应对象,如果状态=="成功"
if(status === "SUCCESS"){
if (response.status == "0") {
Ti.API.info("status== " + response.status);
Ti.App.role = response.role;
Alloy.createController('home', {employeeId:$.userTextField.value,password:$.passwordTextField.value,from:"index"}).getView().open();
} else if (response.status == '1') {
alert(response.message);
} else {
alert("Please enter the correct credentials");
}
}
else {
alert("whoops, please try again !"); // a more generic message.
}