JavaScriptエラー:無効なラベル?これは何を意味するのでしょうか?
-
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エンコーダーは二重引用符を逃がしません。