为什么即使输入元素为空,ajax仍要上传二进制文件,该如何解决?

问题描述

以下是视图部分(HTML):

<?= $this->Form->create(null,['id' => 'chat-form','type' => 'file']) ?>
    <div class="chat-input">
        <div class="chat-input-content">

            <textarea id="chat-message" name="message" placeholder="メッセージを入力" required></textarea>
            <input type="file" id="clip" name="chat_image" accept="image/jpeg,image/png">

            <button type="submit" class="btn-chat">submit</button>
        </div>
    </div>
<?= $this->Form->end(); ?>

这是JS部分:


// Post chat message
$("#chat-form").submit(function(event) {
    event.preventDefault();

    // disabling submit to prevent double submissions
    var $this = $(this);
    var $submitBtn = $this.find('button');
    $this.attr('disabled',true);
    $submitBtn.attr('disabled',true);

    // Getting form data with FormData object
    formData = new FormData(this);
    // Adding key value pair
    formData.append('order_id',2);

    // Sending form to the controller
    $.ajax({
        url     : "<?= $this->Url->build('/mypage/chat/post-chat-messages') ?>",type    : 'POST',data    : formData,contentType: false,processData: false,}).done(function (html) {
        $('#chat-message').val('');
        appendSlideDown( $('.chat-list'),html );
        
    }).fail(function(){
        alert("Fail");

    }).always(function(){
        $this.attr('disabled',false);
        $submitBtn.attr('disabled',false);
    });
});

因此,当我提交此表单时未选择任何图像时,您可以在下图中看到XHR请求包含一个二进制文件!我不知道为什么 ?我正在考虑验证JS中的来解决此问题。是否有人知道为什么会发生这种情况以及防止这种情况的最佳方法。谢谢!

Image of the problem

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...