我的 jQuery 插件参数无法正确触发时遇到问题

Having trouble with my jQuery plugin parameters not firing correctly

我正在处理许多老化的应用程序,我需要做的是进入应用程序并提取 html 表并将它们显示在新页面上,然后在那里更新代码样式。我已经为 ajax 调用创建了一个插件,我想为它提供 url 和目标 ID 的参数,然后将它们显示在页面的不同部分。问题是它接受作用域中的最后一个参数,并在 doc.ready.

中的所有函数调用中使用它们
(function($){
    $.fn.getAppData = function(options) {
            data = $.extend({
                target: $(this),
                id: "body",
                url: "/error/404error.html",
                callback: function(){}
            }, options );
            $.ajax({
                url: data.url,
                cache: false
            })
            .done(function( html ) {
                //alert(data.id);
                $display = $(html).find('div'+data.id);
                data.target.append($display);
                options.callback.call(this);
            })
            .fail(function() {
                alert('Error loading '+data.id+' data.');
            });
        }
    }
}(jQuery));

这里是 doc.ready 语句中的调用:

$(document).ready(function(e) {
    $('#bulletinBoard').getAppData({
    target: $('#bulletinBoard'),
    id: '#tabs-1',
    url: '/webapps/BulletinBoard/default.cfm',
    callback: function() {
        //manipulate the new loaded html here
    }
});
$('#VTCSchedule').getAppData({
    target: $('#VTCSchedule'),
    id: "#vtcInfo",
    url: "/webapps/VTCInfo/default.cfm",
    callback: function() {
        //manipulate the new loaded html here
    }
});
$('#askMGMT').getAppData({
    target: $('#askMGMT'),
    id: "#askMGMT",
    url: "/webapps/askthera/AskTheRIIManagement.asp",
    callback: function() {
        //manipulate the new loaded html here
    }
});
});

这可能是一个骨头动作,但我没有看到问题,而且我没有太多时间。提前致谢。

记下你的 ajax url:data.url。这将始终是“/error/404error.html”您当前的状态。您应该 data.url 从 options:

拉取
 $.fn.getAppData = function(options) {
        $this = $(this);
        data = $.extend({
            id: options.id, // <- this is now dynamic
            url: options.url, // <- this is now dynamic
            callback: function(){}
        }, options );

data.id 相同。

编辑

我错了!问题出在 data =。因为您缺少 var,您正在将 data 分配给全局范围,因此每次对该方法的新调用都会覆盖它。我会改为使用以下内容:

(function($){
    $.fn.getAppData = function(options) {
            $this = $(this);
            var data = $.extend({ // <- Only available in current scope because of "var"!
                id: "body",
                url: "/error/404error.html",
                callback: function(){}
            }, options );
            $.ajax({
                url: data.url,
                cache: false
            })
            .done(function( html ) {
                //alert(data.id);
                $display = $(html).find('div'+data.id);
                $this.append($display);
                options.callback.call(this);
            })
            .fail(function() {
                alert('Error loading '+data.id+' data.');
            });
        //Also note, that there was an extra bracket "}" here
    }
}(jQuery));