1 votes

jQuery.fn - Pourquoi cela ne fonctionne-t-il pas ?

Quel est le problème ? (A part le fait d'avoir un code redondant). $.getJSON fonctionne comme prévu. Cependant, les $.postJSON ne fonctionne pas. Je peux inspecter $.fn via firebug et bien sûr postJSON est listé. Cependant, si j'essaie de l'appeler, j'obtiens une erreur "no function defined".

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);
};

5voto

meder Points 81864

JQuery.fn est une référence au prototype de l'objet jQuery, auquel tous les objets construits jQuery ont accès, de sorte que cette fonction devient jQuery.prototype.postJSON. Si vous souhaitez la déclarer comme une méthode statique, vous ne devez pas spécifier le ".fn"

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

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

La raison pour laquelle jQuery.getJSON est une "fonction" est qu'il s'agit d'une méthode native de l'objet jQuery (ce n'est pas la chose que vous déclarez, qui est jQuery.prototype.getJSON) ;

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X