1

我一直在使用 HTML 和 javascript 版本的 Adob​​e AIR 开发一个简单的应用程序。

应用程序向在线 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 等的建议,我已经尝试了这些,但我没有成功。

这让我发疯,任何帮助将不胜感激。

提前非常感谢!

4

1 回答 1

0

看看这个问题的公认答案。这里的问题是垃圾收集“太快”回收了一些 var:换句话说,范围是 baaad。:

AIR Sqlite:SQLEvent.RESULT 未触发,但语句正在正确执行

编辑:所有这些都是范围问题。您应该查看“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.
于 2012-10-24T13:11:52.103 回答