2012-03-19 21 views
0

私はこの例を最小限のコードに減らしました。 私は 'this'キーワードに注目しています。

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

私は何をしたいのですが、呼び出し元のルーチンが settings.contextを設定する必要がないように、コンテキストに$(this)を使用している:ここでは

は、私は私のAjaxのプラグインを呼び出す方法です=これ。

ここで私はこれまで持っているものだが、私は私が間違ってそれをやっている知っている:あなたは、このことによってそれを取得する必要がありますので、プラグインのコードでこの

!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

答えて

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); 
関連する問題