我一直在使用 Adobe AIR(HTML 和 JavaScript 版本)开发一个简单的应用程序。
应用程序向在线 URL 提交表单。
表单的值是 JSON 字符串。
我正在使用此函数来提交数据:
function fetchStudents()
{
var stmt = new air.SQLStatement();
stmt.sqlConnection = conn;
stmt.text = "SELECT * FROM studentsTable2 WHERE deleted='0'";
stmt.addEventListener(air.SQLEvent.RESULT, function(event){
var result = event.target.getResult();
sync_students = JSON.stringify(result.data);
fetchCourses();
});
stmt.addEventListener(air.SQLErrorEvent.ERROR, errorHandler);
stmt.execute();
}
JSON.stringify
当我在 DREAMWEAVER 中测试应用程序时,可以使用:在 ADOBE AIR 中预览。
sync_students
是一个 JSON 字符串,其中填充了表中格式正确的所有数据。
但是当我创建 AIR 文件并安装该应用程序并运行它时,它不再起作用。
sync_students
是一个 JSON 字符串,但它完全是空的... [{},{},{}]
我阅读了很多资料,看到了使用 JSON2.js 等的建议,我已经尝试过这些,但没有成功。
这让我发疯,任何帮助将不胜感激。
提前非常感谢!
最佳答案
看看这个问题的已接受答案。这里的问题是垃圾收集“太早”回收了一些 var:换句话说,范围是 baaad。 :
AIR Sqlite: SQLEvent.RESULT not firing, but statement IS executing properly
编辑:所有这些都是范围问题。您应该研究“javascript 范围”和“javascript 闭包”关键字,以便更好地理解这一点(如果我可以建议的话)。
下面是关于在 javascript 中定义“类”的一种方式的(非常)简短摘要:
var MyNameSpace = {};
var MyNameSpace.SchoolDataSource = function() {
this.publicMember = 2;
this.publicFunction = function(x) {
var newValue = this.publicMember + _privateMemberOne + x;
return _privateFunctionMul2(newValue);
} ;
var _privateMemberOne = 1;
var _privateFunctionMul2 = function (y) { return 2*y; } ;
};
var mySchoolDataSource = new MyNameSpace.SchoolDataSource();
mySchoolDataSource.publicFunction(3); // ok. (returns (3+2+1) * 2 = 12)
var bar = mySchoolDataSource.publicMember; // ok. ( === 2)
mySchoolDataSource._privateFunctionMul2(4); does not work, which is what we want.
var foo= mySchoolDataSource._privateMemberOne; // does not work, which is what we want.
关于javascript - JSON stringify 在从 Dreamweaver 预览时有效,但在创建应用程序时不能从 .AIR 文件预览,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13049270/