Ошибка JavaScript: неверный ярлык? что это значит? - PullRequest
0 голосов
/ 03 февраля 2011

не беспокойтесь! похоже, больше текста, чем есть ;-) так что, пожалуйста, продолжайте читать!

Основные вопросы:

  • Что означает ошибка: неверный ярлык означает?
  • Где ошибка в моем скрипте?

теперь начинается чудовище; -):

У меня есть скрипт, который загружает элементы языкового массива (элементы, определенные с помощью lang_keys в js - см. Выше) с сервера (сервер доставляет JSON-версию этого массива) для текущего языка.

с функцией JS translate("<synonym>"); вы получите необходимый текст на текущем языке. ОБНОВЛЕНИЕ: jquery 1.5 не минимизирован (старый: jquery.js (v1.4.1 - минимизирован)) загружен и lang.js тоже.

поэтому я получаю ошибку, которую просто не могу найти

Я должен добавить: функция translate() работает без ошибок и JS не прерывается. Все функции работают по желанию. У меня нет других ошибок, и все JS работает нормально ... но я не хочу удивляться будущему - поэтому мне нужно избавиться от этой ошибки.

консольный вывод в chrome (который указан после запроса 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

консольный вывод в Firefox (который указан после запроса ajax [/ query / js_lang / json]):

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

Может кто-нибудь сказать мне точно, что означает ошибка: invalid label?

Мой скрипт (lang.js) выглядит так:

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() отображает стиль CSS. Я использую эту функцию в других частях сайта, где она работает без проблем.

Я удалил элементы в lang_keys, где возвращаемое значение имеет специальные символы, такие как ':', umlauts, косая черта и т. Д. ... скажем: я протестировал его только с буквенно-цифровыми значениями и получил ту же ошибку. 1054 *

извините за мой английский ;-) и спасибо за вашу помощь

Ответы [ 2 ]

1 голос
/ 22 февраля 2011

Что ж, после некоторого дополнительного исследования и некоторых подсказок в потоках StackOverflow я понял это сейчас:

Проблема в том, что jQuery интерпретирует полученные данные ajax как скрипт (javascript) по некоторым причинам - долженчто-то с функцией eval(), которая интерпретирует первый объект json как скрипт, потому что он выглядит / запускается как экземпляр объекта.

Это происходит (в моем случае), только если выполнен вызов ajax до полной загрузки сайта .ну, с вызовами ajax во внутреннем коде $(function() { ... }); проблем пока нет.

Хитрость заключалась в добавлении скобок вокруг строки json в php-скрипте

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

и удалите их после получения в обратном вызове 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);
          ...

просто фей о метках: вот некоторая информация об этом

1 голос
/ 03 февраля 2011

Я думаю, что проблема с возвращенным JSON:

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

Это должно выглядеть примерно так:

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

Может быть проблема на стороне сервера.Ваш JSON-кодировщик не экранирует двойные кавычки.

...