检查FormData是否为空

时间:2016-11-01 16:50:00

标签: jquery ajax

所以我有一个这样的表格:

<form id="uploadimage" action="" method="post" enctype="multipart/form-data">                   
    <div class="text-inside">
        Selectati Categoria<br><select id="sc" name="selectCat"></select><br><br>
        Nume Produs<br><input id="numprod" type="text" name="input-text" /><br>
        Pret Produs<br><input id="pretprod" type="number" name="input-pret" /><br><br>
        <input type="file" name="file"><br><br>
        <input type="submit" name="sumit" value="Send" id="imgButton" class="button"  /><br><br>
    </div>              
</form>

我正在尝试检查filelds是否为空以防止用户提交空字段,所以我使用了这个:

$('#uploadimage').on('submit',(function(e) {
    e.preventDefault();
    var formData = new FormData(this);
    var name= $('#numprod').val();
    var pret = $('#pretprod').val();

    if(name && pret){
        $.ajax({
            url: 'connect.php',
            type: 'POST',
            data: formData,
            async: false,
            cache: false,
            contentType: false,
            processData: false,
            success: function(){
                alert('uploaded successuflly!');
            }
        });
    }else{alert('input fields cannot be left empty you num num!');}
}));

但是我仍然可以在没有选择文件的情况下提交,并且ajax不再重新加载页面。有什么建议我该怎么办?

4 个答案:

答案 0 :(得分:7)

简短回答,您无法可靠地检查FormData是否包含信息(正如您提出的原始问题)。

在Chrome和Firefox中,您可以使用FormData.entries()来检索信息,但旧版浏览器不支持这些信息,当然也不支持IE浏览器。

另一种方法是直接验证表单元素 - 正如您所做的那样 - 除了您错过了file输入。另请注意,您应该删除async: false作为使用它的非常糟糕的做法。

要修复您的代码,请检查val()条件中file输入的if

$('#uploadimage').on('submit', function(e) {
    e.preventDefault();
    var name = $('#numprod').val().trim();
    var pret = $('#pretprod').val().trim();
    var file = $('input[type="file"]').val().trim(); // consider giving this an id too

    if (name && pret && file) {
        $.ajax({
            url: 'connect.php',
            type: 'POST',
            data: new FormData(this),
            cache: false,
            contentType: false,
            processData: false,
            success: function(){
                alert('uploaded successuflly!');
            }
        });
    } else {
        alert('input fields cannot be left empty you num num!');
    }
});

答案 1 :(得分:1)

在类型文件的输入中添加一个ID,并检查它是否包含以下代码段的文件:

if(document.getElementById("file").files.length == 0 ){
    console.log("no files selected");
}

答案 2 :(得分:0)

由于这是Google的最佳搜索结果,对于任何寻求快速检查FormData对象是否为空的解决方案的人,FormData.entries()将返回一个迭代器。如果在该迭代器上使用.next()方法,则将获得具有属性donevalue的对象。因此,您可以检查该done属性以确定迭代器是否没有条目。这符合我的需求:

formDataObject.entries().next().done

还有一个沙盒概念证明:https://codesandbox.io/s/16v99w3o4(检查控制台)

答案 3 :(得分:0)

我认为您也可以将数据转换为字符串并检查长度。

surveyData.toString().length

没有长度,没有数据。