2010-12-07 7 views
3

Est-il possible d'étendre jQuery 1.3 pour inclure la fonction parseJSON de la version 1.4.1+, et la faire fonctionner de la même manière que dans jQuery 1.4.1+? Comment pourrais-je m'y prendre?Ajouter jQuery.parseJSON à jQuery 1.3

J'ai quelques sites où je dois utiliser jQuery 1.3, mais j'ai un outil qui nécessite parseJSON, qui a seulement été introduit dans jQuery 1.4.1. Je sais vaguement que je devrais prendre parseJSON de la version 1.4.1+ et essayer d'en faire un plugin, mais je ne sais pas comment faire ça.

+1

@yc, qu'en est-il de l'utilisation de json2.js ?? – kobe

+0

@gov mes mains sont liées quant aux fonctions qui sont incluses; J'en ai besoin pour pouvoir utiliser 'parseJSON'. Je sais, c'est ridicule. – Yahel

Répondre

11

Vous pouvez faire un plugin comme ceci:

$.extend({ 
    error: function(msg) { throw msg; }, 
    parseJSON: function(data) { 
     if (typeof data !== "string" || !data) { 
      return null; 
     }  
     data = jQuery.trim(data);  
     if (/^[\],:{}\s]*$/.test(data.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, "@") 
      .replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, "]") 
      .replace(/(?:^|:|,)(?:\s*\[)+/g, ""))) {  
      return window.JSON && window.JSON.parse ? 
       window.JSON.parse(data) : 
       (new Function("return " + data))();  
     } else { 
      jQuery.error("Invalid JSON: " + data); 
     } 
    } 
}); 

You can test it here.
Ce code est adopté à partir de jQuery 1.4.4 - found here. Après avoir inclus le ci-dessus avec jQuery 1.3 comme votre question a, utilisez simplement $.parseJSON() comme vous le feriez normalement ... ou dans votre cas, il suffit d'inclure les plugins après le code ci-dessus et $.parseJSON() sera présent pour eux à utiliser.

+0

C'est le genre de chose que je cherchais. Merci. Va tester et revenir vers vous. – Yahel

+1

Testé. Cela marche. Merci! – Yahel

+2

Un seul petit problème si vous utilisez 1.3.x ... jQuery.error n'a pas été ajouté jusqu'à ce que 1.4.1 :) Ajout: - erreur: function (msg) { jet msg; }, au-dessus de la définition de parseJSON va résoudre ce problème. –

0

Est-il impossible pour vous de modifier le code qui utilise 1.3? Le jQuery.json plugin fournit $ .toJSON et $ .evalJSON, qui sont équivalents aux nouveaux de 1.4. Vous pouvez essayer d'utiliser JSON.parse natif et JSON.stringify dans les navigateurs où il est pris en charge. Dans l'ancien navigateur, vous devrez inclure JSON2 pour ajouter le support JSON.parse et JSON.stringify à ces navigateurs.

+0

Non, ce n'est malheureusement pas possible. Mes mains sont liées au contenu du code que je reçois de ce plugin. – Yahel