2009-08-29 26 views
1

ここで問題は何ですか? (冗長コードを持つ以外に) $.getJSONは期待どおりに動作します。しかし、$.postJSONは機能しません。 firebugで$.fnを調べることができ、十分な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.prototype.postJSONなるようにオブジェクトは、へのアクセス権を持って構築jQueryオブジェクトのプロトタイプへの参照です。あなたは、静的メソッドとして宣言したい場合は、「の.Fn」

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

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

jQuery.getJSONは、 『機能』は、それがjQueryオブジェクトのネイティブメソッドだから(それはないです理由を指定するべきではありません宣言していることはjQuery.prototype.getJSONです)。

関連する問題