Domanda

nessun problema! Sembra più testo di quanto non sia ;-) Quindi per favore continua a leggere!

Le domande principali sono:

  • Cosa fa l'errore: Etichetta non valida significare?
  • Dov'è l'errore nel mio script?

Ora inizia la roba geek ;-):

Ho uno script che carica gli elementi di una lingua -array (elementi definiti tramite Lang_keys in JS - vedi sopra) dal server (Server fornisce una versione JSON di quell'array), per la lingua corrente.

con JS translate("<synonym>"); funzione si ottiene il testo richiesto nella lingua corrente. AGGIORNAMENTO: jQuery 1.5 non minimizzato (vecchio: jquery.js (v1.4.1 - minimizzato)) è caricato e anche lang.js.

Quindi ricevo un errore, che non riesco a trovare

Devo aggiungere: il translate() La funzione funziona senza errori e JS non viene interrotto. Tutte le funzioni funzionano come desiderato.Non ho altri errori e tutti i JS funzionano bene ... ma non voglio essere sorpreso dal Futur, quindi devo sbarazzarmi di quell'errore.

Output della console in Chrome (che è elencato dopo la richiesta 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

Output della console in Firefox (che è elencato dopo la richiesta AJAX [/query/js_lang/json]):

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

Qualcuno può dirmi esattamente quale errore: invalid label significa?

La mia sceneggiatura (lang.js) sembra così:

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() Visualizza un Div in stile CSS. Sto usando quella funzione in altre parti del sito Web, dove funziona senza problemi.

Ho rimosso gli articoli in lang_keys Laddove il valore di ritorno ha caratteri speciali come ':', umlauts, tagli e così via ... diciamo: l'ho testato con solo valori alfanumerici e ho ottenuto lo stesso errore.

Scusa per il mio inglese ;-) E grazie per il tuo aiuto

È stato utile?

Soluzione 2

Bene, dopo qualche altra ricerca e alcuni suggerimenti in fili stackoverflow l'ho capito ora:

Il problema è che JQuery interpreta gli Ajax ricevuti i dati come script (JavaScript) per qualche motivo - deve avere qualcosa con cui fare qualcosa eval() funzione, che interpreta il primo oggetto JSON come script perché sembra / inizia come un'istanza dell'oggetto.

Questo si verifica (nel mio caso) solo se il La chiamata Ajax viene effettuata prima che il sito venga caricato completamente. Bene, con le chiamate Ajax interne alcuni $(function() { ... }); Codice non ci sono problemi finora.

Il trucco era quello di aggiungere i brani attorno alla stringa JSON nello script PHP

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

e rimuoverli dopo aver ricevuto nel callback dell'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);
          ...

Solo FYI sulle etichette: Qui alcune informazioni riguardo a questo

Altri suggerimenti

Penso che il problema sia con il JSON restituito:

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

Questo dovrebbe assomigliare a questo:

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

Potrebbe esserci un problema sul lato server. Il tuo codificatore JSON non sfugge a doppie citazioni.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top