0

心配ない!それよりも多くのテキストのように見えます;-)ですので、読み続けてください!

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

  • エラー:無効なラベルはどういう意味ですか?
  • スクリプトのエラーはどこにありますか?

今、こっけいなものが始まります;-):

現在の言語の言語配列の項目(jsのlang_keysを介して定義された項目-上記を参照)をサーバー(サーバーはその配列のJSONバージョンを提供します)からロードするスクリプトがあります。

JStranslate("<synonym>");関数を使用すると、現在の言語で必要なテキストを取得できます。更新:jquery 1.5が縮小されていません(古い:jquery.js(v1.4.1 --minified))が読み込まれ、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スタイルのdivを表示します。私はその機能をウェブサイトの他の部分で使用していますが、問題なく機能します。

lang_keys戻り値に「:」、ウムラウト、スラッシュなどの特殊文字が含まれているアイテムを削除しました...例:英数字の値のみでテストしたところ、同じエラーが発生しました。

私の英語をごめんなさい;-)そしてあなたの助けに感謝します

4

2 に答える 2

1

さて、StackOverflowスレッドでいくつかの調査とヒントを行った後、私は今それを理解しました:

eval()問題は、jQueryが何らかの理由でajaxで受信したデータをスクリプト(javascript)として解釈することです-オブジェクトインスタンスのように/開始するため、最初の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);
          ...

ラベルについての参考情報:ここにそれに関するいくつかの情報があります

于 2011-02-22T09:52:58.240 に答える
1

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

于 2011-02-03T11:16:30.470 に答える