Javascript 无法将XMLHttpRequest的返回值传递给变量

Javascript 无法将XMLHttpRequest的返回值传递给变量,javascript,php,xmlhttprequest,Javascript,Php,Xmlhttprequest,我无法将XMLHttpRequest的返回值(它在一个很小的csv文件中搜索字符串并以所需语言返回其值)分配给变量。它总是说字符串是未定义的 我甚至添加了一个延迟,让XMLHttpRequest有时间读取csv文件(顺便说一句,它只有几行),但没有用 有什么建议吗!我卡住了 function DisplayItemInCorrectLanguage() { var str = GetLocalizedTerm ("CBRAND", Language);

我无法将XMLHttpRequest的返回值(它在一个很小的csv文件中搜索字符串并以所需语言返回其值)分配给变量。它总是说字符串是未定义的

我甚至添加了一个延迟,让XMLHttpRequest有时间读取csv文件(顺便说一句,它只有几行),但没有用

有什么建议吗!我卡住了

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的检查,会对多块代码产生相同的效果…根本无法解决问题。我的坏消息。你说得对..尝试新代码。。应该有用