我正在尝试搜索此文本文件,但它返回一个数字,代码无效,只返回一个数字
<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>
答案 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();
}