覆盖$ .get()中的变量值

时间:2013-05-22 00:24:45

标签: javascript jquery

我面临着一个非常奇怪的问题,我似乎无法从jSonData的成功函数中覆盖变量$.get()

$.fn.name = function(data, options) {
        var jSonData = data;
        var settings = $.extend({
                ....        
        }, options);

        if(typeof data !== 'object') {
            if(settings.debug) console.log('Getting configuration settings from: ', data);
            $.get(data, function(d) {
                jSonData = d; //I attempt to override the value here
            }, 'json');
        }
        console.log(jSonData); // Gives the same value as it was before
};

注意:触发$ .get()的成功事件

2 个答案:

答案 0 :(得分:1)

当您记录该值时,$.get()尚未覆盖jSonData,因为此时AJAX请求尚未返回。而是在函数内部console.log

$.get(data, function(d) {
  jSonData = d; //I attempt to override the value here - You just did!
  console.log(jSonData);
}, 'json');

答案 1 :(得分:0)

我遇到了这个问题,因为AJAX调用是异步的,因此在执行console.log()时调用不会完成。

解决方案我用来修复问题的方法是使用延迟方法。

$.fn.name = function(data, options) {
    var jSonData = data;
    var settings = $.extend({
            ....        
    }, options);
    var getData = function() {
        if(typeof data !== 'object') {
            return $.get(data, 'json');
        }
        else { return jSonData; }
    };
    getData().done(function(result) {
        jSonData = result;
        console.log(jSonData); // Gives the same value as it was before
    }).fail(function() {
        //
    });

};