我正在尝试使用标准函数loadDoc(url,cfunc)读取服务器上的本地文件,然后
1)搜索文件中的特定字符串(getLine());
2)如果可能,将该行存储到变量中。
对于第1点,我将字符串传递给回调。 2)获得响应是有问题的,因为XMLHTTPRequest是异步的。此时错误是: “ReferenceError:xhttp未定义”
col+row
data.txt是这样的:
function main(){
var url="data.txt"
var str="1,0,"; //just an example
var myCallBackWithVar = function(){
getLine(str);
};
loadDoc(url, myCallBackWithVar);
//Can I get the line here somehow?
}
function loadDoc(url, cfunc) {
var xhttp=new XMLHttpRequest();
xhttp.onreadystatechange = function() {
if (xhttp.readyState == 4 && xhttp.status == 200) {
cfunc(xhttp);
}
}
xhttp.overrideMimeType('text/plain');
xhttp.open("GET", url, true);
xhttp.send();
}
//Find string with the desired data in txt file
function getLine(str) {
var data=xhttp.responseText;
//Find the line from the txt file
var start=data.indexOf(str);
var end=data.indexOf(";",start);
var line=data.substring(start,end);
return line;
}
我已经尝试传递XMLHTTPRequest对象getLine(xhttp,str)。如何解决第1点和第2点?我宁愿暂时保持jQuery免费。谢谢
答案 0 :(得分:1)
完成后,您不需要通过回调函数传递整个xhttp变量。当你这样做时:
function getLine(str) {
var data=xhttp.responseText;
xhttp已经超出了范围。要解决此问题,参数名称也必须是xhttp。
更好的方法是:
cfunc(xhttp.responseText);
然后
var data=str
这样,你只传递你需要的参数。
答案 1 :(得分:1)
我能以某种方式获得这条线吗?
我认为这不是一个好主意。您无法确定您的应用是否可以正常运行。 XHR是一个异步函数,你应该使用异步架构。
这里是如何完成此功能的示例。
var text; // define global variable
var str = "1,0,"; //just an example
function main(){
var url = "data.txt";
var cb = function (data){
text = getLine(data);
// you can use text var here
// or in anyewhere in your code
}
loadDoc(url, cb);
}
function loadDoc(url, cb) {
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function() {
if (xhr.readyState == 4 && xhr.status == 200) {
cb(xhr.responseText);
}
}
xhr.overrideMimeType('text/plain');
xhr.open("GET", url, true);
xhr.send();
}
//Find string with the desired data in txt file
function getLine(data) {
if(data) {
//Find the line from the txt file
var start = data.indexOf(str);
var end = data.indexOf(";", start);
var line = data.substring(start, end);
return line;
}
}