2009-08-29 3 views
1

В чем проблема? (Помимо наличия избыточного кода). $.getJSON работает должным образом. Однако $.postJSON не работает. Я могу проверить $.fn через firebug и, конечно же, указать postJSON. Однако, если я попытаюсь назвать это, я получаю ошибку, не определенную функцией.jQuery.fn - Почему это не работает?

jQuery.fn.getJSON = function(path, opts){ 
    this.extend(opts, { 
    url: path, 
    dataType: 'json', 
    type: 'GET' 
    }); 

    var invalid = opts.error; 
    opts.error = function(xhr, status){ 
    var data = $.httpData(xhr, 'json'); 
    if (invalid) 
     invalid(data); 
    } 

    this.ajax(opts); 
}; 

jQuery.fn.postJSON = function(path, data, opts) { 
    this.extend(opts, { 
    url: path, 
    data: data, 
    dataType: 'json', 
    type: 'POST' 
    }); 

    var invalid = opts.error; 
    opts.error = function(xhr, status){ 
    var data = $.httpData(xhr, 'json'); 
    if (invalid) 
     invalid(data); 
    } 

    this.ajax(opts); 
}; 

ответ

5

jQuery.fn является ссылкой на прототип объекта JQuery, который все JQuery построенных объектов имеют доступ к, так что функция становится jQuery.prototype.postJSON. Если вы хотите, чтобы объявить его как статический метод, вы не должны указать «.fn»

jQuery.fn.postJSON = function(){}; 

alert(typeof jQuery.prototype.postJSON); // function 
alert(typeof jQuery.postJSON); // undefined 

Причина jQuery.getJSON является „функция“, потому что это родной метод объекта JQuery (это не то, что вы объявляете, это jQuery.prototype.getJSON);