使用jQuery上传文件

时间:2013-04-04 10:54:13

标签: php jquery html ajax upload

我对使用Ajax上传文件有疑问。如何使用$.ajax()提交文件 没有特殊的js-plugin?:

<form action="javascript:return false;">
    <input type="text" id="name" />
    <input type="file" id="myfile" />
    <input type="button" id="submitbutton" value="submit" />
</form>

这是一个jQuery小代码:

<script type="text/javascript">
    $(document).ready(function() {
        $('#submitbutton').click(function() {
            $.ajax({
                type: 'POST',
                dataType: 'json',
                enctype: 'multipart/form-data',
                url: 'upload.php',
                async: false,
                data: {
                    'name': $('#name').val(),
                    'myfile': $('#myfile').val()
                },
                success: function(data) {
                    alert(data.msg);
                }
            });
        });
    });
</script>

并上传.php文件:

<?php
$name = isset($_POST['name']) ? $_POST['name'] : '';
if (isset($_FILES) && isset($_FILES["file"])) {
    $files = $_FILES['file'];
    $error = isset($files["error"]) ? $files["error"] : '';
    $fname = isset($files["name"]) ? $files["name"] : '';
    $type = isset($files["type"]) ? $files["type"] : '';
    $size = isset($files["size"]) ? $files["size"] : '';
    $tmp_name = isset($files["tmp_name"]) ? $files["tmp_name"] : '';
    return array('msg' => "Hello, $name! \nYour file data:\nErr: $error, Name: $fname, Type: $type, Size: $size, Tmp: $tmp_name");
}
echo json_encode(array('msg' => 'create image'));
?>

3 个答案:

答案 0 :(得分:1)

其他选项是使用iframe, this is a tutorial for doing this;

答案 1 :(得分:1)

无法通过ajax上传文件。您可能想要签出支持文件上传的表单插件:http://jquery.malsup.com/form/

答案 2 :(得分:0)

如果您希望使用这种跨浏览器,那么只能使用AJAX。 (但是你可以不在所有浏览器中工作,你可以看看如何使用XMLHttpRequest上传文件和jquery here

至于我,最好的方法是使用jQuery Forms插件。

另一种选择是做插件手动做的事情。

它将如下所示:

var ifrm = $("<iframe>", {id:"tmp_upload_frame"}).onload(function() {
  // do something when response is returned
}).hide();
$("body").append(ifrm);
$("form").prop("target", "tmp_upload_frame")
         .prop("enctype","multipart/form-data")
         .submit();

但对我来说,Forms插件要好得多,因为它有一个非常类似于ajax界面的界面,并为你做了很多脏工作(比如从iframe中检索响应)。