在封装的JavaScript函数中设置用于重用的私有变量
Set Private Variable for Reuse In Encapsulated JavaScript function
我有一个JavaScript函数,它从包含JSON的文本文件中读取一些数据。理想情况下,我希望将所有JSON数据传递给encapulated函数中的一个私有变量,这样,如果需要再次读取数据,就可以使用该变量。
我不想每次需要进行某些检查时都在阅读文本文件。对我来说,这听起来不利于表演。
这是我的代码:
function someObj() {
var siteDataSet = null;
this.Init = function () {
populateData();
}
this.GetPageData = function () {
var props = new Array();
props[0] = siteDataSet.pagetitle;
props[1] = siteDataSet.week_no;
props[2] = siteDataSet.intro_text;
return props;
}
function populateData() {
$.ajax({
type: "GET",
url: "data.txt",
contentType: "application/json; charset=utf-8",
dataType: "json",
data: "",
success: function (result) {
siteDataSet = result;
},
error: function () { },
complete: function () { }
});
}
}
$(document).ready(function () {
o_obj = new someObj();
o_obj.Init();
var t = o_obj.GetPageData();
});
正如您所看到的,我调用Init()
是为了使用jQueryAjax将所有JSON传递给一个名为siteDataSet
的变量。当我调用GetPageData()
时,siteDataSet变量为null,而不应该是这种情况。
我是不是在以一种完全荒谬的方式接近我试图实现的目标?
这可能是因为您的ajax调用异步发生,并且在尝试访问变量时尚未完成。通常,在这种情况下,您最好的选择是使用promise,它会告诉您的代码期待结果,因为它还没有设置。
有几个库提供了一种实现,例如:https://github.com/promises-aplus/promises-spec
作为替代方案,可以创建一个您希望在完成时被调用的方法,该方法将包含您希望执行的所有代码,然后将其传入
function afterRetrieved(o_obj) {
var t = o_obj.GetPageData();
...
}
o_obj.Init(afterRetrieved);
这会将函数传递到Init
方法中,以便在检索数据后执行。它需要对您的实现进行一些更改,如下所示:
this.Init = function (fn) {
populateData(fn);
}
function populateData(fn) {
....
success: function (result) {
siteDataSet = result;
fn(this)
},
...
}
我想这两种方式中的任何一种都应该解决你的问题。
相关文章:
- 将函数的上下文应用于javascript变量
- 将文本框中的值用于按钮窗体操作上的变量
- AngularJS-使模型变量可用于jQuery
- 用于交换两个变量的 JavaScript 函数
- 使变量可用于不带闭包的异步调用
- 用于提取基于点概念的变量的动态Regex
- 保留 JQuery Vars 用于另一个函数(全局变量?)
- 用于添加和删除类的 Jquery 打开/关闭变量
- 用于比较 HTML 标记内的变量的正则表达式
- 流星技术/模式,用于等待数据库变量更改,然后在 in 之后执行某些操作
- 转义序列jQuery,用于在引号内使用变量
- 将变量用于 jquery CSS 属性名称
- 将 rails 实例变量用于 javascript 条件
- 如何将 js 变量用于另一个文件
- 不能将 jQuery 中定义的变量用于 html
- PHP数组中的javascript变量用于jquery自动完成
- Javascript在不同的函数中引入变量;用于谷歌投标的天气脚本
- 我们可以将一个.js文件的变量用于其他.js文件吗
- 在 JavaScript 中使用 PHP 变量用于 Google 地图多边形
- 一个变量用于 JS 中的两个函数