随机选择一行并将该行上的每个单词保存到每个Javascript变量中

时间:2019-03-28 04:56:14

标签: javascript text

根据变量“数字”选择一行 然后将该行中的每个单词保存到每个javascript变量1和javascript变量2中。

如果变量号等于2,则选择第2行,将Variables1设置为Potato,将Variables2设置为Tomato。

//Text file on server 

Apple, Oranges
Potato, Tomato
Cake, Muffin
Cheese, Milk



//Java script code in browser. 
    var number = Math.floor((Math.random() * 4) + 1);
    var xhr = new XMLHttpRequest();
    xhr.open("GET","http://..........data.txt",false);
    xhr.send(null); 

下一步我该怎么做?

感谢任何帮助 预先感谢

1 个答案:

答案 0 :(得分:0)

您最好通过后端服务器而不是js选择随机字符串,因为服务器可以做到这一点。您可以创建一个页面,将其引用到该页面并将文件的路径作为参数传递,并将其设置为从该文件返回随机行。解析该字符串后,可以在已解析的字符串上使用split()以获得这些单词的数组。另外,您应该考虑使用fetch,因为它可以代替XHR

所以我的js代码看起来像这样:

function getTextFile(path){
    var line = Math.floor(Math.random() * 4);
    params = {
        path: path,
        line: line
    }

    var data = new FormData();
    data.append("json", JSON.stringify(params));

    var promise = fetch("http://mysite/myscript.php", {method: 'POST', body: data})
    .then((response) => {
        return response.text();
    }).then((text) => {
        if(text != 'error'){
           text = text.replace(/(\r\n|\n|\r)/gm, "");
           var result = text.split(" ");
           //Result will be an array of those values and will look something   like that:
           //["Cheese", "Milk", "Yogurt"]
        }
        else{
           alert('error');
        }
    });
}

然后在后端看起来像这样:

$json = (array) json_decode($_POST['json']);


if( validatePath($json['path']) ){
    $file = file($json['path']);
    $my_string = $file[$json['line']];
    echo $my_string;
}
else{
    echo 'error';
}


function validatePath($path){
    //You should definitely use some other validations
    $allowedExtensions = ['txt', 'json'];
    $pathinfo = pathinfo($path);
    //Right now it's only checking for right extension and 
    //that's this file ain't located in admin subdir
    if(strstr($pathino['dirname'], '/admin') || !in_array($pathinfo['extension'], $allowedExtensions)){
        return false;
    }
    else{
        //Check if file exists
        if( file_exists($path) ){
            return true;    
        }
        else{
            return false;
        }
    }
}

尽管不是所有的浏览器都支持fetch,但是如果您想支持更多的浏览器,则需要polyfill。