无后顾之忧!它看起来比文字更多;-)所以请继续阅读!
主要问题是:
现在开始讨厌的东西; - ):
我有一个脚本,它从服务器(服务器提供该阵列的JSON版本)加载当前语言的语言数组项(通过js中的lang_keys定义的项目 - 见上文)。
使用JS translate("<synonym>");
函数,您可以使用当前语言获得所需的文本。 UPDATE: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样式的div。我在网站的其他部分使用该功能,它的工作没有任何问题。
我删除了lang_keys
中的项目,其中返回值包含特殊字符,如':',变音符号,斜杠等等...说:我只用字母数字值测试了它并得到了相同的错误的
对不起我的英语;-)并感谢您的帮助
答案 0 :(得分: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编码器不会转义双引号。
答案 1 :(得分:1)
好吧,经过一些研究和StackOverflow线程中的一些提示,我现在想出来了:
问题是,jQuery由于某种原因将ajax接收数据解释为脚本(javascript) - 必须与eval()
函数一起使用,它将第一个json对象解释为脚本,因为它看起来像/ starts就像一个对象实例。
仅当在完全加载网站之前完成 ajax调用时才会发生这种情况(在我的情况下)。好吧,使用ajax调用内部一些$(function() { ... });
代码到目前为止没有任何问题。
诀窍是在php脚本中的json字符串周围添加brakets
$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);
...
关于标签的问题:here some information关于那个