我有一个主要用PHP编写的应用程序。使用gettext()进行翻译。
还有一小部分JavaScript,其中包含需要翻译的字符串。 我使用XMLHttpRequest编写了这个简单但有效的方法:
在 JavaScript 中,我刚刚调用:
如果我同步调用这个函数[xmlhttp.open("GET", filename, false);],Firefox/Chrome会警告我:
所以,虽然这种方法能够正常工作,但它可能随时停止工作。
但是,如果我异步运行代码 [xmlhttp.open("GET", filename, true);],那么下一行将在结果出现之前执行。 值将为未定义。
在这种情况下,使用异步XMLHttpRequest是否可行?还是我应该继续同步获取值,直到编写了一些聪明的API?
我应该用PHP编写我的JS文件吗?(我希望不是这样。)
附言:
还有一小部分JavaScript,其中包含需要翻译的字符串。 我使用XMLHttpRequest编写了这个简单但有效的方法:
function gettext(string_to_translate) {
var filename = get_php_script_folder() + 'gettext.php?string_to_translate=' + string_to_translate;
var xmlhttp = new XMLHttpRequest();
xmlhttp.open("GET", filename, false);
xmlhttp.send();
if (xmlhttp.status === 200) {
var translated_string = xmlhttp.responseText;
return translated_string;
} else {
console.log("Error while translating " + string_to_translate + " Status " + xmlhttp.status);
return string_to_translate; //Just give the original string.
}
}
这个php文件也非常简单:
require_once '../../default.php'; //configures gettext, session management, etc.
//TODO: support for ngettext might be added.
$string_to_translate = filter_input(INPUT_GET, 'string_to_translate', FILTER_SANITIZE_STRING);
$translated_string = gettext($string_to_translate);
echo $translated_string;
在 JavaScript 中,我刚刚调用:
var input_box_form_default_reason = gettext("Vacation");
document.getElementById('input_box_form_reason').value = input_box_form_default_reason;
如果我同步调用这个函数[xmlhttp.open("GET", filename, false);],Firefox/Chrome会警告我:
[Deprecation] Synchronous XMLHttpRequest on the main thread is deprecated because of its detrimental effects to the end user's experience. For more help, check https://xhr.spec.whatwg.org/.
所以,虽然这种方法能够正常工作,但它可能随时停止工作。
但是,如果我异步运行代码 [xmlhttp.open("GET", filename, true);],那么下一行将在结果出现之前执行。 值将为未定义。
在这种情况下,使用异步XMLHttpRequest是否可行?还是我应该继续同步获取值,直到编写了一些聪明的API?
我应该用PHP编写我的JS文件吗?(我希望不是这样。)
附言:
我不使用像jQuery这样的框架。这是一种“宗教”信仰。我想要完全理解和维护整个代码库。
我阅读了以下问题,但没有回答我的问题: