Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用jQuery上传文件_Php_Jquery_Html_Ajax_Upload - Fatal编程技术网

Php 使用jQuery上传文件

Php 使用jQuery上传文件,php,jquery,html,ajax,upload,Php,Jquery,Html,Ajax,Upload,我有一个关于用Ajax上传文件的问题。如何使用$.ajax()提交文件 没有特殊的js插件 <form action="javascript:return false;"> <input type="text" id="name" /> <input type="file" id="myfile" /> <input type="button" id="submitbutton" value="submit" /> <

我有一个关于用Ajax上传文件的问题。如何使用
$.ajax()提交文件
没有特殊的js插件

<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>

$(文档).ready(函数(){
$(“#提交按钮”)。单击(函数(){
$.ajax({
键入:“POST”,
数据类型:“json”,
enctype:“多部分/表单数据”,
url:'upload.php',
async:false,
数据:{
“name”:$(“#name”).val(),
“myfile”:$(“#myfile”).val()
},
成功:功能(数据){
警报(data.msg);
}
});
});
});
和upload.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'));
?>


其他选项使用的是
iframe,

无法通过ajax上载文件。您可能希望签出支持文件上传的表单插件:

如果您希望在跨浏览器中使用该插件,那么仅使用AJAX是无法做到这一点的。(但这并不适用于所有浏览器,您可以看看如何使用XMLHttpRequest和jquery上传文件)

对我来说,最好是使用插件

另一个选择是做同样的事情插件手动

它将如下所示:

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();
var ifrm=$(“”,{id:“tmp\u upload\u frame”}).onload(函数(){
//当响应返回时,请执行某些操作
}).hide();
$(“正文”)。追加(ifrm);
$(“表单”).prop(“目标”、“tmp上传帧”)
.prop(“enctype”、“多部分/表单数据”)
.submit();

但对我来说,Forms plugin要好得多,因为它有一个非常类似于ajax接口的接口,并且为您做了很多脏活(比如从iframe检索响应)。

您不能用ajax发布文件。您不能用ajax上传文件,您需要尽可能使用一些第三方库,但不能使用较旧的浏览器。请参见以下答案:它不是重复的。我反对这一论点。