我有一个引用2个javascript文件x.js和y.js的HTML页面。
在y.js中,我从Web服务请求一些数据。当我收到数据时,我想调用任何已注册数据的方法。我向y.js添加了一个RegisterCallback函数,并从x.js中调用了该函数并向其传递了一个回调函数,该函数被添加到数组中。
当从Web服务接收数据时,for循环会调用之前已注册的所有回调函数。
这样可以调用x.js中的回调函数。但是,在调用回调函数时,未定义在x.js中初始化的变量。
似乎在x.js中调用的回调函数与注册回调时传递的x.js不同。 (如果这是有道理的)
在下面的示例中,变量svgImage被初始化,但是当回调发生时,它是未定义的。
x.js
var svgImage;
function InitialiseX() {
try {
this.svgImage = document.querySelector(this.svgView).getSVGDocument().querySelector(this.svgImageId);
RegisterDataReceivedCallback(ProcessReceivedData);
GetData()
}
catch (err) {
alert(err);
}}
function ProcessReceivedData(result) {
if (this.svgImage.querySelector("#" + parameterId)) {//Not Complete}}
y.js
var getParameterDataCallbacks = [];
function RegisterParameterDataReceivedCallback(callback){
getParameterDataCallbacks.push(callback);}
function GetParameterData(){
try {
$.ajax({
url: '/api/parametersdata',
dataType: "json",
type: "POST",
contentType: 'application/json; charset=utf-8',
data: JSON.stringify({ UserLevel: "1000", IpAddress: deviceIpAddress }),
async: true,
processData: false,
cache: false,
success: function (data) {
for (key in getParameterDataCallbacks)
{
getParameterDataCallbacks[key](data);
}
},
error: function (error) {
}
});
}
catch (err) {
alert(err);
}}
如果我从x.js调用GetParameterData并传递回调函数而不是注册并将其存储在数组中,它可以正常工作。
我该如何克服这个问题?