JavaScriptエラー:無効なラベル?これは何を意味するのでしょうか?

StackOverflow https://stackoverflow.com/questions/4885309

  •  28-10-2019
  •  | 
  •  

質問

心配ない!それはそれよりも多くのテキストのように見えます;-)だから読んでください!

主な質問は次のとおりです。

  • エラーは何ですか: 無効なラベル 平均?
  • 私のスクリプトのエラーはどこにありますか?

今、オタクなものが始まります;-):

現在の言語のために、サーバー(サーバーのJSONバージョンのその配列を配信)から言語アレイ(上記のlang_keysを介して定義されたアイテム)をロードするスクリプトがあります。

JSで translate("<synonym>"); 関数現在の言語で必要なテキストを取得します。 更新:jquery 1.5は縮小されていません (古い:jquery.js(v1.4.1-マニファイ))ロードされており、lang.jsもロードされています。

だから私はエラーがあります、それは私が見つけることができません

追加する必要があります: translate() 関数はエラーなしで機能し、JSは中断されません。すべての関数は、必要に応じて機能します。他のエラーはありませんし、すべてのJSが正常に動作します...しかし、私はFuturに驚かされたくありません。そのため、そのエラーを取り除く必要があります。

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スタイルのdivを表示します。私はその機能をウェブサイトの他の部分で使用しており、問題なく動作します。

アイテムを削除しました lang_keys 戻り値には「:」、Umlauts、Slashesなどの特殊文字がある場合...言う:私はそれを英数字のみでテストし、同じエラーを得ました。

私の英語をごめんなさい;-)そしてあなたの助けをありがとう

役に立ちましたか?

解決 2

さて、いくつかの研究とStackoverflowスレッドのヒントの後、私は今それを理解しました:

問題は、jQueryがAjaxを受け取ったデータを何らかの理由でスクリプト(JavaScript)として解釈することです - 何かtodoを持っている必要があります eval() 関数。最初のJSONオブジェクトをスクリプトとして解釈します。これは、オブジェクトインスタンスのように見える /開始するためです。

これは(私の場合)に発生します Ajaxコールは、サイトが完全にロードされる前に行われます. 。さて、Ajaxが内側にいくつかと呼ばれます $(function() { ... }); これまでのところ問題はありません。

トリックは、PHPスクリプトのJSON文字列の周りにブレイクを追加することでした

$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);
          ...

ラベルに関するFYI: ここでいくつかの情報 そのことについて

他のヒント

問題は返された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エンコーダーは二重引用符を逃がしません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top