2012-03-19 64 views
0

我已將此示例簡化爲最小代碼。 我正在關注'this'關鍵字。

以下是我打電話給我的Ajax插件:

settings.context = this; 
myXHR = $(this).myAjax('myComponent.cfc',settings); 

我希望做的是使用$(本)的上下文,以便調用程序沒有設置 settings.context = this;

這裏就是我這麼遠,但我知道我做錯了:

!function($, window, document, undefined) { 
    $.fn.myAjax.myOptions = { 
     type: 'POST', 
     dataType: 'json' 
    } 
    $.fn.myAjax = function(myURL, mySettings) { 
     var local = {}; 
     local.settings = $.extend({}, $.fn.myOptions, mySettings); 
     local.settings.context = this; 
     local.XHR = $.ajax(myURL,local.settings) 
     return local.XHR; 
    }; 
}(jQuery, window, document); 
在插件代碼
+2

這是包裹着jQuery對象,所以你需要通過它來獲取它[ 0],並且你有錯誤'local.settings = $ .extend({},$ .fn.myAjax.myOptions,mySettings);' – jcubic 2012-03-19 17:23:03

回答

0
!function($, window, undefined) { 
    var document = window.document; 
    $('#msg').ajaxStart(function() { 
     $(this).empty().removeClass('alert alert-info'); 
    }); 
    var Variables = {}; 
    Variables.settings = { 
     type: 'post', 
     dataType: 'json', 
     async:false 
    }; 
    $.fn.myAjax = function(myURL, mySettings) { 
     var local = {}; 

     mySettings = $.extend({}, Variables.settings, {context:this[0]}, mySettings); 
     local.$xhr = $.ajax(myURL,mySettings); // myURL += '?returnFormat=json&queryFormat=column' 
     local.$xhr.done(function(result) { 
      if (result.MSG) { 
       $('#msg').html(result.MSG).addClass('alert alert-error'); 
      } 
     }); 
     local.$xhr.fail(function(jqXHR, textStatus, errorThrown) { 
      $('#msg').html(textStatus + ': ' + errorThrown).addClass('alert alert-error'); 
     }); 
     return local.$xhr; // return this.each() 
    }; 
}(jQuery, window); 
相關問題