将参数传递给ajax回调

时间:2019-07-13 18:16:23

标签: javascript ajax

我有一个javascript函数,该函数必须获取一个文件并将其传递给另一个参数:

getJsonFile = function(fileName, callback, error, data) {
        var ajaxOptions = {
            url: util.pathJoin([Options.server_cache_path, jsonRelativeFileName]),
            type: "GET",
            dataType: "json",
            success: function(album) {
                callback(album, data)
            },
            error: error
        };

在整个应用程序中,getJsonFile函数在for个周期中被多次调用。

但是,在callback函数中,有时我发现data的值已更改...为什么会发生?有什么解决方案?

1 个答案:

答案 0 :(得分:0)

如上所述,您正在从循环(用于)中调用 getJsonFile 函数,并且很有可能传递 data 参数作为参考。在这种情况下,您将传递一个指向变量的指针,该变量在每次循环迭代中都会更改,并且在调用成功回调时, data 参数将引用一个与原始呼叫不同的对象。

解决此类问题的一种方法是复制您收到的参数(或至少从数据中获取)的副本。 OR 获取您有兴趣使用的值关闭以捕获当前数据参考值。

getJsonFile = function(fileName, callback, error, data) {
        var callbackCall = (function(myData) { 
            return function(myAlbum) { callback(myAlbum, myData); };
        })(data);
        var ajaxOptions = {
            url: util.pathJoin([Options.server_cache_path, jsonRelativeFileName]),
            type: "GET",
            dataType: "json",
            success: function(album) {
                callbackCall(album);
            },
            error: error
        };

避免使用callbackCall变量

getJsonFile = function(fileName, callback, error, data) {
   // Code omitted...
   success: (function(myData) { 
            return function(album) { callback(album, myData); };
   })(data)
   // Code omitted...
}