16

如果有人知道此代码有什么问题,请告诉我。

基本上我想使用 jQuery 上传文件

<html>
<head>
  <script src="http://code.jquery.com/jquery-latest.js"></script>

  <script type="text/javascript">
    $(document).ready(function(event) {
      $('#form1').submit(function(event) {
        event.preventDefault();
        $.post('post.php',function(data){
           $('#result').html(data);
        });
      });
    });
  </script>  
</head>
<body>
<form id="form1">
  <h3>Please input the XML:</h3>
  <input id="file" type="file" name="file" /><br/>
  <input id="submit" type="submit" value="Upload File"/>
</form>

<div id="result">call back result will appear here</div>

</body>
</html>

和我的 php 'post.php'

<?php
  echo $file['tmp_name'];
?>

不返回上传的文件名。问题是我无法访问上传的文件。

提前致谢!希夫

4

6 回答 6

19

基本上我想使用 jQuery 上传文件

您不能使用 AJAX 上传文件。您可以使用使用隐藏 iframe的jquery.form插件:

<html>
<head>
    <script src="http://code.jquery.com/jquery-latest.js"></script>
    <script src="http://malsup.github.com/jquery.form.js"></script>
    <script type="text/javascript">
        $(document).ready(function(event) {
            $('#form1').ajaxForm(function(data) {
                $('#result').html(data);
            });
        });
  </script>  
</head>
<body>
<form id="form1" action="post.php" method="post" enctype="multipart/form-data">
    <h3>Please input the XML:</h3>
    <input id="file" type="file" name="file" /><br/>
    <input id="submit" type="submit" value="Upload File"/>
</form>

<div id="result">call back result will appear here</div>

</body>
</html>

还要注意enctype="multipart/form-data"表格上的。

另一种可能性是使用HTML5 File API,它允许您在客户端浏览器支持的情况下实现这一目标。

于 2012-06-15T07:56:28.900 回答
9

用 jQuery $.post 上传文件是不可能的,但是用文件 API 和 XMLHttpRequest 完全可以用 AJAX 上传文件,你甚至可以知道已经上传了多少数据......

$('input').change(function() 
{
    var fileInput = document.querySelector('#file');

    var xhr = new XMLHttpRequest();
    xhr.open('POST', '/upload/');

    xhr.upload.onprogress = function(e) 
    {
        /* 
        * values that indicate the progression
        * e.loaded
        * e.total
        */
    };

    xhr.onload = function()
    {
        alert('upload complete');
    };

    // upload success
    if (xhr.readyState == 4 && (xhr.status == 200 || xhr.status == 0))
    {
        // if your server sends a message on upload sucess, 
        // get it with xhr.responseText
        alert(xhr.responseText);
    }

    var form = new FormData();
    form.append('title', this.files[0].name);
    form.append('pict', fileInput.files[0]);

    xhr.send(form);
}
于 2013-05-01T21:16:15.610 回答
5

不不不,您应该使用 jQuery 表单插件来异步上传文件。您不能使用 jQuery $.post 方法上传文件。该文件将使用隐藏的 iframe 上传

另一种方法是通过 FileAPI/BlobApi 使用 HTML5 上传

于 2012-06-15T07:54:58.507 回答
2

您的 upload.php 有一些错误。

你应该改变你的这部分。

echo $file['tmp_name'];

到:-

echo $_FILES['file']['tmp_name'];
于 2015-10-14T11:02:59.307 回答
0

尝试使用 iframe 上传,因为您无法使用 $.post 方法发送文件。

于 2012-06-15T07:56:57.877 回答
0

您也可以尝试 jquery uploadify - http://www.uploadify.com/

于 2012-06-16T11:37:43.830 回答