Question

pas de soucis! cela ressemble à plus de texte qu'il ne l'est ;-) alors continuez à lire!

Les principales questions sont:

  • Que signifie l'erreur: libellé non valide ?
  • Où se trouve l'erreur dans mon script?

maintenant les choses geek commencent ;-):

J'ai un script qui charge les éléments d'un tableau de langue (éléments définis via lang_keys dans js - voir ci-dessus) depuis le serveur (le serveur fournit une version JSON de ce tableau), pour la langue actuelle.

avec la fonction translate("<synonym>"); de JS, vous obtenez le texte requis dans la langue actuelle. MISE À JOUR: jquery 1.5 non minifié (ancien: jquery.js (v1.4.1 - minifié)) est chargé et lang.js aussi.

donc j'obtiens une erreur, que je ne trouve tout simplement pas

Je dois ajouter: la fonction translate() fonctionne sans erreur et le JS n'est pas interrompu. Toutes les fonctions fonctionnent comme vous le souhaitez. Je n'ai pas d'autres erreurs et tout le JS fonctionne bien ... mais je ne veux pas être surpris à l'avenir - donc je dois me débarrasser de cette erreur.

Sortie de la console dans chrome (qui est répertoriée après la requête ajax [/ query / js_lang / json]):

Uncaught SyntaxError: Unexpected token :    jQuery.jQuery.extend.globalEvaljquery.js:602
jQuery.ajaxSetup.converters.text            scriptjquery.js:6992
ajaxConvert                                 jquery.js:6884
done                                        jquery.js:6454
jQuery.ajaxTransport.send.callback          jquery.js:7252
jQuery.ajaxTransport.send                   jquery.js:7261
jQuery.extend.ajax                          jquery.js:6646
(anonymous function)                        lang.js:116

Sortie de la console dans Firefox (qui est répertoriée après la requête ajax [/ query / js_lang / json]):

invalid label
{"js_accept_terms":"Du musst unseren A...:"Kontaktname","js_agent_email":"Konta

Quelqu'un peut-il me dire exactement ce que signifie l'erreur: invalid label?

Mon script (lang.js) ressemble à ça:

var month_names = new Array();
var day_names = new Array();

var lang_keys = new Array(   
    "js_accept_terms",
    ...
    "nope"
);

var translations = new Array();


function translate(key, replace){
    var translated = translations[key];

    if(replace != undefined){
        for(var i=0; i<replace.length; i++){
            translated = translated.replace(/\%1/, replace); 
        }
    }

    return translated;
}

$.ajax({ //this is line 116
   url: "/query/js_lang/json",
   type: "post",
   data: {keys: JSON.stringify(lang_keys)},
   timeout: 7000,
   success: function(data){
       var trans = jQuery.parseJSON(data);
       for(var key in trans){
           translations[key.replace(/^js\_/, "")] = trans[key];
       }
       month_names = new Array(translate("jan"), translate("feb"), translate("mar"), translate("apr"), translate("may"), translate("jun"), translate("jul"), translate("aug"), translate("sep"), translate("oct"), translate("nov"), translate("dec"));
       day_names   = new Array(translate("sun"), translate("mon"), translate("tue"), translate("wed"), translate("thu"), translate("fri"), translate("sat"));
   },
   error: function(){
       out_message("Error. No Language loaded!", "Error");
   },
   async: false
});

out_message() affiche un div de style css. J'utilise cette fonction dans d'autres parties du site Web, où elle fonctionne sans aucun problème.

J'ai supprimé des éléments dans lang_keys où la valeur de retour contient des caractères spéciaux comme ':', des trémas, des barres obliques, etc. disons: je l'ai testé avec uniquement des valeurs alphanumériques et j'ai eu la même erreur.

désolé pour mon anglais ;-) et merci pour votre aide

Était-ce utile?

La solution 2

Eh bien, après quelques recherches supplémentaires et quelques indices dans les threads StackOverflow, je l'ai compris maintenant:

Le problème est que jQuery interprète les données reçues ajax comme un script (javascript) pour une raison quelconque - doit avoir quelque chose à faire avec la fonction eval(), qui interprète le premier objet json comme un script car il ressemble à / commence comme une instance d'objet.

Cela ne se produit (dans mon cas) que si l ' appel ajax est effectué avant que le site ne soit complètement chargé .eh bien, avec les appels ajax dans du code $(function() { ... });, il n'y a pas de problèmes pour l'instant.

l'astuce était d'ajouter des brakets autour de la chaîne json dans le script php

$return_value = "(" . json_encode($translation) . ")";

et supprimez-les après avoir reçu le rappel ajax-success

$.ajax({    
    ...,
    success: function(data){
           data = data.substring(1,data.length-1); // for label error reason. getting json in breaktes,, which must be removed again
           var trans = jQuery.parseJSON(data);
          ...

juste pour info sur les libellés: voici quelques informations à ce sujet

Autres conseils

Je pense que le problème vient du JSON renvoyé:

{"js_accept_terms":"Du musst unseren A...:"Kontaktname","js_agent_email":"Konta

Cela devrait ressembler à ceci:

{"js_accept_terms":"Du musst unseren A...:\"Kontaktname","js_agent_email":"Konta

Il peut y avoir un problème côté serveur.Votre encodeur JSON n'échappe pas aux guillemets doubles.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top