搜索文本文件返回一个数字

时间:2015-10-21 17:04:40

标签: javascript

我正在尝试搜索此文本文件,但它返回一个数字,代码无效,只返回一个数字

<script type="text/javascript">
function readTextFile(file)
{
    var rawFile = new XMLHttpRequest();
    rawFile.open("GET", file, true);
    rawFile.onreadystatechange = function ()
    {
        if(rawFile.readyState === 4)
        {
            var allText = rawFile.responseText;
            document.getElementById("textSection").innerHTML = allText;
        }
    }

    rawFile.send();
}

var str = readTextFile("testing.txt");
var n = str.search("Testing Search");
</script>

3 个答案:

答案 0 :(得分:0)

readTextFile调用是异步的。您无法立即获得str。你应该使用回调。因此,只有在收到回复时,您才能对文本执行某些操作。

示例代码:

<script type="text/javascript">
function readTextFile(file, callback)
{
    var rawFile = new XMLHttpRequest();
    rawFile.open("GET", file, true);
    rawFile.onreadystatechange = function ()
    {
        if(rawFile.readyState === 4)
        {
            var allText = rawFile.responseText;
            document.getElementById("textSection").innerHTML = allText;
            callback(allText); // call your function passing received text into it
        }
    }

    rawFile.send();
}

readTextFile("testing.txt" function(myStr) {
    // You will get here when response is received
    var n = str.search("Testing Search");
    alert(n);
});
</script>

答案 1 :(得分:0)

这是因为Ajax请求是asynchronous。你应该这样做:

function readTextFile(file, callback)
{
    var rawFile = new XMLHttpRequest();
    rawFile.open("GET", file, true);
    rawFile.onreadystatechange = function ()
    {
        if(rawFile.readyState === 4)
        {
            var allText = rawFile.responseText;
            document.getElementById("textSection").innerHTML = allText;
            callback(allText);
        }
    }

    rawFile.send();
}

readTextFile("testing.txt", function(text)
{
    var n = text.search('Testing Search');
});

答案 2 :(得分:0)

您的readTextFile函数没有return语句,因此不会返回任何内容,当您执行var str = readTextFile("testing.txt");时,str将始终为{{} 1}}。

除此之外,您使用的方式undefined是异步操作,然后,您将无法返回从文件中收到的文本。

所以,你必须理解你需要做一些与众不同的事情。例如,回调函数:

XMLHttpRequest

然后,您将使用它:

function readTextFile(file, callback)
{
    var rawFile = new XMLHttpRequest();
    rawFile.open("GET", file, true);
    rawFile.onreadystatechange = function ()
    {
        if(rawFile.readyState === 4)
        {
            var allText = rawFile.responseText;
            document.getElementById("textSection").innerHTML = allText;
            callback(allText);
        }
    }

    rawFile.send();
}