用JavaScript打开本地文件

用JavaScript打开本地文件,第1张

用JavaScript打开本地文件

实际上,这很可能是范围问题。由于您异步设置allText,因此函数返回后将无法立即使用它。另外,您将在函数中重新初始化allText,这无论如何都会影响返回范围。

rawFile.onreadystatechange
函数返回后执行。您可以将执行移到XHR回调中,也可以将函数包装在promise中,这仍然需要您稍微修改控制流。

移动

document.write

<!DOCTYPE html><html>    <script>        function readTextFile(file)        {    var allText; var rawFile = new XMLHttpRequest(); rawFile.open("GET", file); rawFile.onreadystatechange = function () {     if(rawFile.readyState === 4)     {         if(rawFile.status === 200 || rawFile.status == 0)         {  allText = rawFile.responseText;  document.write(allText);         }     } } rawFile.send(null);        }        readTextFile("foo.file");    </script></html>

promise:

function readTextFile( file ) {  return new Promise( function ( fulfill, reject ) {    var allText;    var rawFile = new XMLHttpRequest();    rawFile.open( "GET", file );    rawFile.onreadystatechange = function () {      if ( rawFile.readyState === 4 ) {        if ( rawFile.status === 200 || rawFile.status == 0 ) {          fulfill( rawFile.responseText )        }      }    }    rawFile.send( null );  } );}readTextFile( "foo.file" )  .then( function ( t ) {    document.write( t );  } );

这两种方法都将确保您的脚本在XHR请求返回之前不会尝试使用allText。

尽管正如SantiagoHernández所指出的那样,XHR请求是同步的,范围问题的性质与我最初设想的不同。问题在于在函数中重新声明变量,导致返回的变量未定义。



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5560361.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-14
下一篇 2022-12-14

发表评论

登录后才能评论

评论列表(0条)

保存