javascript错误:标签无效?这是什么意思?

javascript错误:标签无效?这是什么意思?,javascript,multiple-browsers,Javascript,Multiple Browsers,不用担心!它看起来像比实际更多的文本;-)所以请继续阅读 主要问题是: 错误:无效标签是什么意思 我的脚本中的错误在哪里 现在极客的东西开始了;-): 我有一个脚本,用于从服务器(服务器提供该数组的JSON版本)加载当前语言的语言数组项(通过js中的lang_键定义的项-见上文) 用JStranslate(“”)函数可以获取当前语言中所需的文本更新:jquery 1.5未缩小(旧版:jquery.js(v1.4.1-缩小版))已加载,lang.js也已加载 所以我得到了一个错误,我就是找不到

不用担心!它看起来像比实际更多的文本;-)所以请继续阅读

主要问题是:

  • 错误:无效标签是什么意思
  • 我的脚本中的错误在哪里
现在极客的东西开始了;-):

我有一个脚本,用于从服务器(服务器提供该数组的JSON版本)加载当前语言的语言数组项(通过js中的lang_键定义的项-见上文)

用JS
translate(“”)函数可以获取当前语言中所需的文本更新:jquery 1.5未缩小(旧版:jquery.js(v1.4.1-缩小版))已加载,lang.js也已加载

所以我得到了一个错误,我就是找不到

我必须补充一点:
translate()
函数工作正常,JS没有中断。所有功能都按需要工作。 我没有任何其他错误,所有JS都可以正常工作。。。但我不想在未来感到惊讶,所以我需要消除这个错误。

chrome中的控制台输出(在ajax请求[/query/js\u lang/json]之后列出):

firefox中的控制台输出(在ajax请求[/query/js\u lang/json]之后列出):

有人能告诉我错误的确切含义:
无效标签
是什么意思吗?

我的脚本(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
});
var month_names=new Array();
var day_names=新数组();
var lang_keys=新数组(
“js_接受条款”,
...
“没有”
);
var translations=新数组();
功能转换(键,替换){
var translated=翻译[键];
如果(替换!=未定义){

对于(var i=0;i我认为问题在于返回的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编码器没有转义双引号。

好了,在StackOverflow线程中进行了一些研究和提示后,我现在明白了:

问题是,jQuery出于某种原因将ajax接收的数据解释为脚本(javascript)——必须使用
eval()
函数来完成,该函数将第一个json对象解释为脚本,因为它看起来像/开始像一个对象实例

在我的例子中,只有在站点完全加载之前完成了ajax调用时才会发生这种情况

诀窍是在php脚本中的json字符串周围添加brakets

$return\u value=“(.json\u encode($translation)。”);

并在接收到ajax成功回调后删除它们

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

仅供参考关于标签:关于这个

{“js_accept_terms”:“Du must unseren A.:“Kontaktname”是无效的json。请用斜杠转义引号。在这种情况下,我会得到错误,我的json无效。json解析正确,因为
translate()
函数不使用
新数组()
;带有
[]的数组文字语法
更好。@missingno:谢谢你的评论。我可以问一下为什么更好吗?不,这就是firebug显示json的方式。它是转义的和unicode编码的。为了更好的可读性-有一些范例建议代码外壳以使用较少注释的方式编写-可以通过正则表达式删除括号。。。
{"js_accept_terms":"Du musst unseren A...:\"Kontaktname","js_agent_email":"Konta
$.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);
          ...