使用ajax调用PHP函数来读取文件

时间:2014-04-26 08:58:55

标签: javascript php jquery ajax

我从输入类型文件中获取文件输入并在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']);
}
?>

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

首先将文件移动到目录中,然后您的rest函数将起作用。

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

此插件将$_FILES的参数发送到您的php文件,然后首先将文件移动到您的目录,然后使用fopen()来阅读和显示内容。

答案 2 :(得分:-1)

您似乎正在提出格式错误的请求。根据文档,它说数据选项直接附加到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变量的位置。它可能只是从您的代码中排除。