Случайно выберите строку и сохраните каждое слово в этой строке в каждой переменной Javascript - PullRequest
0 голосов
/ 28 марта 2019

выберите строку в зависимости от переменной «число», затем сохраните каждое из слов в этой строке в каждую переменную javascript1 и переменную javascript2.

если номер переменной равен 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 голосов
/ 28 марта 2019

Вам лучше выбирать случайную строку через ваш бэкэнд-сервер, а не через 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, и если вы хотите поддерживать больше браузеров, вам понадобится полифилл.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...