【问题标题】:Calling PHP function with ajax to read file用ajax调用PHP函数来读取文件
【发布时间】:2014-04-26 17:06:25
【问题描述】:

我正在从输入类型文件中获取文件输入,并在 onchange 事件上调用 javascript 函数,如下所示:

<input type="file" onchange="readTheFile(this)">

javascript 函数正在调用一个包含另一个 PHP 函数的 php 文件。 javascrit函数是:

function readTheFile(file){
$.ajax( 
           {
               url: 'readFile.php',
               type: 'GET',
               data: 'fileLoc= '+file,
               success: function(output) 
               {
                   document.getElementById("content").innerHTML = output ;

               }
            }
        ); 
}
</script>

我总是收到错误:

Warning: fopen( [object HTMLInputElement]) [function.fopen]: failed to open stream: No           such file or directory in D:\xampp\htdocs\sha\readFile.php on line 3
Unable to open file!

readFile.php 的内容是:

<?php
function readFiles($fileLoc){
$file = fopen($fileLoc, "r") or exit("Unable to open file!");
while(!feof($file)) {
echo fgets($file);
}
fclose($file);
}

if(isset($_GET['fileLoc'])){
echo readFiles($_GET['fileLoc']);
}
?>

【问题讨论】:

  • 读取从客户端浏览器中选择的文件。您实际上不需要上传文件。 如果您只想显示内容而不需要进一步使用。您可以只使用 javascript 来读取文件并显示内容。

标签: javascript php jquery ajax


【解决方案1】:

我建议使用 FILE API 方法(仅限现代浏览器)

http://www.html5rocks.com/en/tutorials/file/dndfiles/

例子:

<input type="file" id="files" />

<script>
  function handleFileSelect(evt) {
    var files = evt.target.files; // FileList object

    for (var i = 0, f; f = files[i]; i++) {

      var reader = new FileReader();

      // Closure to capture the file information.
      reader.onload = (function(theFile) {
        return function(e) {
          alert(e.target.result);
        };
      })(f);

      reader.readAsDataURL(f);
    }
  }

  document.getElementById('files').addEventListener('change', handleFileSelect, false);
</script>

Live example here

【讨论】:

  • 您能否建议我在我的代码中进行编辑。我只想以这种方式读取文件。我已经试过你的代码了。它对我不起作用。
【解决方案2】:

首先将文件移动到目录中,然后您的休息功能将起作用。

这是一个通过 ajax 上传文件的 jquery 插件:jQuery Form Plugin

这个插件将$_FILES的参数发送到你的php文件中,然后先将文件移动到你的目录然后使用fopen()读取和显示内容。

【讨论】:

    【解决方案3】:

    您的请求似乎格式不正确。根据文档,它说数据选项直接附加到 GET 请求的 url 上。我认为这不太可能是因为您正在点击正确的 php 脚本。

    https://api.jquery.com/jQuery.ajax/

    试试改成

    function readTheFile(file){
    $.ajax( 
               {
                   url: 'readFile.php',
                   type: 'GET',
                   data: { fileLoc: file },
                   success: function(output) 
                   {
                       document.getElementById("content").innerHTML = output ;
    
                   }
                }
            ); 
    }
    

    另外,我看不到您从 $_GET 数组中提取 $fileLoc 变量的位置。它可能只是从您的代码中排除。

    【讨论】:

      猜你喜欢
      • 2018-08-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-13
      • 1970-01-01
      • 2011-11-10
      相关资源
      最近更新 更多