【问题标题】:Browsers are giving different jquery errors in the result of code浏览器在代码结果中给出不同的 jquery 错误
【发布时间】:2016-07-13 10:28:21
【问题描述】:

我正在尝试使用 jquery、ajax 和 php 使用多个接受输入来验证和上传图像。我添加了正常工作的验证功能,但表单没有提交,chrome和firefox也在控制台中显示不同的错误。

HTML

<form id="promotionImageForm_<?php echo $row['pm_id']; ?>"  autocomplete="off" enctype="multipart/form-data">
    <label>Add More Images</label>
    <input type="file"  name="pm_image[]" class="form-control" multiple="multiple" id="pmMultiImgs_<?php echo $row['pm_id']; ?>" />
    <input type="hidden" name="pm_id" value="<?php echo $row['pm_id']; ?>"  />
    <input type="hidden" name="uploadImageByID" value="uploadImageByID" />
    <button type="button" onclick="return multiImageUpload(<?php echo $row['pm_id']; ?>);" id="pmMultibTn" />Add</button>
</form>

JS函数

function uploadImageByID(formData){
    $.ajax({
        type:'POST',
        url:'response.php',
        data:formData,
        dataType:"json",
        success: function(response){
            $(".pmImgPopNoti").remove();
            if(response.success){
                $(".pmRes_"+promotionImageID).prepend('<div id="login-alert" class="alert alert-success pmImgPopNoti col-sm-12">'+response.success+'</div>');                   
            }
            if(response.error){
                $(".pmRes_"+promotionImageID).prepend('<div id="login-alert" class="alert alert-danger pmImgPopNoti col-sm-12">'+response.error+'</div>');
            }   
        }
    });
}   
function multiImageUpload(pmID){
    $('#promotionImageForm_'+pmID).validate();
    $('#pmMultiImgs_'+pmID).each(function() {
        $(this).rules("add", {
            required: true,
            accept: "image/jpeg, image/pjpeg, image/png",
            messages: {
                accept: "Only jpeg, jpg or png images"
            }
        });
    });
    if ($('#promotionImageForm_'+pmID).valid()) {
        var formDetail = $('#promotionImageForm_'+pmID);
        var formData = new FormData(formDetail);
            uploadImageByID(formData);
            return false;
    }
}

Chrome 显示此错误

未捕获的类型错误:非法调用

FireFox 显示此错误

TypeError:FormData.constructor 的参数 1 未实现接口 HTMLFormElement。 var formData = new FormData(formDetail);

谁能指导我如何解决这个错误。如果有人指导我,我将不胜感激。谢谢你

【问题讨论】:

  • 它似乎期望 Form 元素本身,而不是 jquery 元素。试试这个: var formDetail = $('#promotionImageForm_'+pmID).get(0);
  • @MartinMouritzen 我试过了,但现在 firefox 给出了这个错误TypeError: 'append' called on an object that does not implement interface FormData. 并且在 chrome 中仍然是这个错误Uncaught TypeError: Illegal invocation

标签: javascript jquery ajax


【解决方案1】:

FormData 对象构造函数需要 form 元素,而不是包含表单的 jQuery 对象。试试这个:

if ($('#promotionImageForm_'+pmID).valid()) {
    var formDetail = $('#promotionImageForm_' + pmID);
    var formData = new FormData(formDetail[0]); // note [0] here
    uploadImageByID(formData);
    return false;
}

【讨论】:

  • 我试过了,还是报这个错误TypeError: 'append' called on an object that does not implement interface FormData.
  • Chrome 仍然给出同样的错误Uncaught TypeError: Illegal invocation
  • 我也刚刚在data:formData 之后添加了processData: false,,现在它可以工作了。感谢分享知识。
猜你喜欢
  • 1970-01-01
  • 2011-04-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多