具有javascript回调函数的范围

时间:2015-12-04 14:22:24

标签: javascript jquery callback

我有一个引用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并传递回调函数而不是注册并将其存储在数组中,它可以正常工作。

我该如何克服这个问题?

0 个答案:

没有答案