输入类型文件-Ajax上传和php脚本

绕道而行

我正在尝试将jquery(v.1.11.3)ajax与jquery.validate 1.15结合使用,以上载包含输入类型文件的表单。您可以从js注释行中看到我尝试过的所有内容。对于每个变体,php脚本都会返回“无图像文件”。当然,如果我删除了jquery脚本,那么表单将随页面刷新一起提交。我真的很想消除页面刷新,以获得更好的UX,但是我没有运气让它工作。如果有人可以帮助我修复我的代码,我将不胜感激。请注意:我研究了许多jquery ajax .post的示例,但是这些示例对我没有帮助,因为这些代码结构无法与Jquery.Validate插件一起使用。我也在这里找到了这个答案:文件上传PHP AJAX但是正如您从我的代码注释中看到的那样,我对此感到厌烦,没有运气。我肯定错过了什么。

标题## html和js:

<!DOCTYPE html>
<html>
<body>

<form action="imguploadTest.php" method="post" enctype="multipart/form-data" id="addItemsForm" name="addItemsForm">
<label>Select image to upload:</label>
    <input type="file" name="itemImg" id="itemImg" />

<label>Name</label>
    <input type="text" name="itemName" class="form-control" placeholder="Item Name..." maxlength="25" value="Really Cool Hoodie" />

<input type="submit" value="Upload Form" name="submit">

<div>
    <div id="results"></div>
</div>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js">    </script>
<script src="js/bootstrap.min.js"></script>
<script src="http://ajax.aspnetcdn.com/ajax/jquery.validate/1.15.0/jquery.validate.min.js"></script>
<script src="http://ajax.aspnetcdn.com/ajax/jquery.validate/1.15.0/additional-methods.min.js"></script>
<script>
$(document).ready(function(){

    $.validator.setDefaults({
        highlight: function(element) {
            $(element).closest('.form-group').addClass('has-error');
        },
        unhighlight: function(element) {
            $(element).closest('.form-group').removeClass('has-error');
        },
        errorElement: 'span',
        errorClass: 'help-block',
        errorPlacement: function(error, element) {
            if(element.parent('.input-group').length) {
                error.insertAfter(element.parent());
            } else if (element.parent('.radio-inline').length || element.parent('.checkbox-inline') ) {
                error.insertAfter(element.parent().parent());
            } else {
                error.insertAfter(element);
            }
        }
    });

    $('#addItemsForm').validate({ // initialize the plugin

        debug: true,

        submitHandler: function(){

            //var formData = $('#addItemsForm').serialize();
            //var data = new FormData($('#addItemsForm'));
            //var form = $('form')[0];
            //var formData = new FormData(form);
            //console.log(addform);
            var frmData = new FormData($(this)[0]);

            $.ajax({
                url: "imgUploadTest.php",
                data: frmData,
                cache: false,
                contentType: false,
                processData: false,
                dataType: 'json'
            })
            .done( function(res, jqXHR, textStatus) {
                console.log(res);
                //$('#results').html('<h4>Thumb link: ' + res["thumb"] + '<h4>');
                //$('#results').append('<h4>Small link: ' + res["small"] + '<h4>');
                //$('#results').append('<h4>Name: ' + res["name"] + '<h4>');
            })
            .fail( function (res, jqXHR, textStatus, errorThrown){
                alert("failed!  " + jqXHR, textStatus);
            });

        return false;

        }  // submitHandler

    });  // validate

});  // doc ready

</script>
</body>
</html>

标题## PHP:

        <?php

        include 'imguploader.class.php';

        // FUNCTIONS

            function imagehandler($item_attr_ID) {

                $imgId = $item_attr_ID;
                $img = new imgUploader($_FILES['itemImg']);
                $time = time();
                $thumb = $img->upload('mobileApp/uploads/', $imgId.'_thumb', 100,100);  // change these numbers for display
                $small = $img->upload('mobileApp/uploads/', $imgId.'_small', 400,400);  // change these numbers for display
                //$full = $img->upload_unscaled('mobileApp/uploads/', $time);

                if($thumb && $small){ // && $full
                    return array($thumb, $small);
                      /* TO SHOW IMAGE
                      echo '<img src="'.$thumb.'" alt="aPicture" /> <img src="'.$small.'" alt="aPicture" /> <img src="'.$full.'"alt="aPicture" />';
                      */
                } else {
                    echo ( 'ERROR! '.$img->getError() );  // --> error code 011.1
                }
            } // end imagehandler()

        // Processes

        if (!empty( $_FILES["itemImg"]) ){
            $item_attr_ID = "jPlayerandtheGirls_8_1456";
            list($item_img_thumb, $item_img_small) = imagehandler($item_attr_ID);
                if ($item_img_thumb && $item_img_small){
                    $r["thumb"] = $item_img_thumb; 
                    $r["small"] = $item_img_small;
                } else {
                    $r["thumb"] = "No Thumb"; 
                    $r["small"] = "No Small";
                    $r["name"] = "Didn't get to name";
                    echo json_encode($r);
                }
        } else {
            $r = "No image file";
            echo json_encode($r);
        }

        if (!empty( $_POST["itemName"] )){
            $r["name"] = $_POST["itemName"];
            json_encode($r);
        }
        ?>
绕道而行

好的,虽然我对JS / Jquery相对陌生,但我对它所涉及的理论并不十分确定,尽管我不能完全确定自己的问题。.serialize()不起作用。我认为这是因为根据定义,文件是二进制文件,因此无法序列化-但不要引用我。因此,您必须使用FormData发送文件。我知道这一点,但无法提出与jquery验证1.15一起使用的正确语法。请参阅下面的答案。希望它可以帮助某人节省一些时间。

首先用我的代码更正菜鸟错误:添加 type: 'post'

第二:用于保存表单数据(包括输入type =“ file”)的变量是这个 var formData = new FormData($('#useYourFormElementIdHere')[0]);

所以最后是这样的:

$.ajax({
     type: "POST",
     url: "imgUploadTest.php",
     data: formData,
     cache: false,
     contentType: false,
     processData: false,
     dataType: 'json'
 }).done({}).fail({}).always({})

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

dart上传文件输入类型文件

来自分类Dev

使用Ajax和php上传文件

来自分类Dev

使用表单文本输入类型上传文件

来自分类Dev

使用Ajax和Google App脚本上传文件以驱动

来自分类Dev

如何使用XAMPP将Ajax文件上传到php脚本

来自分类Dev

输入类型中的功能= PHP中的文件

来自分类Dev

使用Ajax和其他类型的输入发送文件

来自分类Dev

jQuery检查文件类型输入中的上传文件名

来自分类Dev

动态创建的输入类型文件不移动上传的文件

来自分类Dev

使用AngularJS和php服务器脚本上传文件

来自分类Dev

HTML输入类型的文件仅支持拖放,但限制文件浏览和上传

来自分类Dev

如何使用PHP,jQuery和AJAX上传多个文件

来自分类Dev

如何使用PHP,jQuery和AJAX上传多个文件

来自分类Dev

jQuery输入类型文件上传验证IE问题

来自分类Dev

类型文件的html输入未上传.mp3

来自分类Dev

原型js:ajax提交时缺少输入类型文件

来自分类Dev

WkWebView 如何管理输入类型文件启动的事件和窗口

来自分类Dev

jQuery文件上传和Ajax

来自分类Dev

如何使用 php 显示已在输入类型文件中上传的图像?

来自分类Dev

PHP上传文件的类型,大小和存在性?

来自分类Dev

PHP文件上传类型检查

来自分类Dev

PHP文件上传类型检查

来自分类Dev

如何从多个文件上传中清除javascript中的一个输入类型文件

来自分类Dev

如何从文件中读取内容,使用“输入类型”= HTML 中的文件上传

来自分类Dev

PHP没有看到来自JavaScript Ajax FormData的数据(输入类型文件)

来自分类Dev

PHP-如何在Ajax / JQuery页面上检索输入类型文件的值

来自分类Dev

使用 AJAX 和 PHP 上传图像和其他信息 - 无法识别文件名

来自分类Dev

PHP-多维数组输入(具有文件类型和文本类型)表格提交

来自分类Dev

无法使用ajax和php将输入上传到mysql数据库

Related 相关文章

  1. 1

    dart上传文件输入类型文件

  2. 2

    使用Ajax和php上传文件

  3. 3

    使用表单文本输入类型上传文件

  4. 4

    使用Ajax和Google App脚本上传文件以驱动

  5. 5

    如何使用XAMPP将Ajax文件上传到php脚本

  6. 6

    输入类型中的功能= PHP中的文件

  7. 7

    使用Ajax和其他类型的输入发送文件

  8. 8

    jQuery检查文件类型输入中的上传文件名

  9. 9

    动态创建的输入类型文件不移动上传的文件

  10. 10

    使用AngularJS和php服务器脚本上传文件

  11. 11

    HTML输入类型的文件仅支持拖放,但限制文件浏览和上传

  12. 12

    如何使用PHP,jQuery和AJAX上传多个文件

  13. 13

    如何使用PHP,jQuery和AJAX上传多个文件

  14. 14

    jQuery输入类型文件上传验证IE问题

  15. 15

    类型文件的html输入未上传.mp3

  16. 16

    原型js:ajax提交时缺少输入类型文件

  17. 17

    WkWebView 如何管理输入类型文件启动的事件和窗口

  18. 18

    jQuery文件上传和Ajax

  19. 19

    如何使用 php 显示已在输入类型文件中上传的图像?

  20. 20

    PHP上传文件的类型,大小和存在性?

  21. 21

    PHP文件上传类型检查

  22. 22

    PHP文件上传类型检查

  23. 23

    如何从多个文件上传中清除javascript中的一个输入类型文件

  24. 24

    如何从文件中读取内容,使用“输入类型”= HTML 中的文件上传

  25. 25

    PHP没有看到来自JavaScript Ajax FormData的数据(输入类型文件)

  26. 26

    PHP-如何在Ajax / JQuery页面上检索输入类型文件的值

  27. 27

    使用 AJAX 和 PHP 上传图像和其他信息 - 无法识别文件名

  28. 28

    PHP-多维数组输入(具有文件类型和文本类型)表格提交

  29. 29

    无法使用ajax和php将输入上传到mysql数据库

热门标签

归档