1

私はjQueryプラグインを構築しています。

プラグインの呼び出し

$('#box').jQueryPlugin({user:'user123'});

JQuery プラグイン

(function($){  
    $.fn.jQueryPlugin= function(options) {  

        var  
          defaults = {  
            user: ''
          }

            var options = $.extend(defaults, options);
            var o = options; 

             $.ajax({
               type: "get",
               url: "http://api.domain.com/user/"+o.user,
               data: "",
               dataType: "jsonp",
               success: function(data){
                    var p = data;
                    console.log(p.location);
                    $(this).html(p.location);
               }
            });

          // returns the jQuery object to allow for chainability.  
          return this;  
    }  
})(jQuery);  

上記を使用すると、console.log に id="box" の div 内に p.location を書き込めないというエラーが表示されます。

プラグインを呼び出すときに指定されたdivに書き込むことができるようにするにはどうすればよいですか?

4

1 に答える 1

4

thisコールバックで期待するコンテキストを持たないため、後で使用できるように varsuccessに割り当てる必要があります..div

(function($){  
    $.fn.jQueryPlugin= function(options) {  

        var  
          defaults = {  
            user: ''
          }

            var options = $.extend(defaults, options);
            var o = options; 

            var $div = $(this);

             $.ajax({
               type: "get",
               url: "http://api.domain.com/user/"+o.user,
               data: "",
               dataType: "jsonp",
               success: function(data){
                    var p = data;
                    console.log(p.location);
                    $div.html(p.location); // now we have the original div;
               }
            });

          // returns the jQuery object to allow for chainability.  
          return this;  
    }  
})(jQuery);

別の方法は、呼び出しでcontextオプションを設定することです。jQuery docs の context オプションを参照してください$.ajax

于 2012-08-31T13:59:48.150 に答える