Javascript 无法将XMLHttpRequest的返回值传递给变量
我无法将XMLHttpRequest的返回值(它在一个很小的csv文件中搜索字符串并以所需语言返回其值)分配给变量。它总是说字符串是未定义的 我甚至添加了一个延迟,让XMLHttpRequest有时间读取csv文件(顺便说一句,它只有几行),但没有用 有什么建议吗!我卡住了Javascript 无法将XMLHttpRequest的返回值传递给变量,javascript,php,xmlhttprequest,Javascript,Php,Xmlhttprequest,我无法将XMLHttpRequest的返回值(它在一个很小的csv文件中搜索字符串并以所需语言返回其值)分配给变量。它总是说字符串是未定义的 我甚至添加了一个延迟,让XMLHttpRequest有时间读取csv文件(顺便说一句,它只有几行),但没有用 有什么建议吗!我卡住了 function DisplayItemInCorrectLanguage() { var str = GetLocalizedTerm ("CBRAND", Language);
function DisplayItemInCorrectLanguage()
{
var str = GetLocalizedTerm ("CBRAND", Language);
console.log('str: ', str); //Does not work. Error: 'str: undefined'
}
function GetLocalizedTerm (itemname, language)
{
var itn = itemname;
var lng = language;
var oReq = new XMLHttpRequest();
oReq.onload = function()
{
//console.log("String is: ", this.responseText); //log is correct: 'String is: CAR BRAND'
//return this.responseText; //Does not return any value to DisplayItemInCorrectLanguage()
};
oReq.open("get", "GetLocalizedTermFromDictionary.php?itemname=" + itn + "&LANG=" + lng, true);
oReq.send();
}
这应该行得通
function GetLocalizedTerm (itemName, language){
return new Promise((resolve, reject) => {
var oReq = new XMLHttpRequest();
oReq.open("get", "GetLocalizedTermFromDictionary.php?itemname=" + itemName + "&LANG=" + language, true);
oReq.onload = () => {
if (oReq.status >= 200 && oReq.status < 300) {
resolve(oReq.response);
} else {
reject(oReq.statusText);
}
};
oReq.onerror = () => reject(oReq.statusText);
oReq.send();
});
}
async function DisplayItemInCorrectLanguage()
{
const language='en'
var str = await GetLocalizedTerm ("CBRAND", language);
console.log('str: ', str);
}
函数GetLocalizedTerm(项目名称、语言){
返回新承诺((解决、拒绝)=>{
var oReq=新的XMLHttpRequest();
open(“get”、“GetLocalizedTermFromDictionary.php?itemname=“+itemname+”&LANG=“+language,true”);
oReq.onload=()=>{
如果(oReq.status>=200&&oReq.status<300){
解决(或答复);
}否则{
拒绝(oReq.statusText);
}
};
oReq.onerror=()=>拒绝(oReq.statusText);
oReq.send();
});
}
异步函数DisplayItemInCorrectLanguage()
{
const language='en'
var str=等待GetLocalizedTerm(“CBRAND”,语言);
log('str:',str);
}
而不是oReq.onload?是的。onload在这里没有意义。
onload
在这里意义非凡,它是在加载数据时触发函数的一种更简单的方法。切换到onreadystatechange
,并添加对readyState和status的检查,会对多块代码产生相同的效果…根本无法解决问题。我的坏消息。你说得对..尝试新代码。。应该有用