为啥ajax调用在每次调用时都会输入成功和错误块?

Posted

技术标签:

【中文标题】为啥ajax调用在每次调用时都会输入成功和错误块?【英文标题】:Why ajax call enter success and error block on every call?为什么ajax调用在每次调用时都会输入成功和错误块? 【发布时间】:2021-09-18 22:48:37 【问题描述】:

我想在数据库中上传图片,每次我进行 ajax 调用时,它都会进入成功和错误块。 这是我的html

    <div>
        <form  id="test-form" enctype="multipart/form-data">
            <div>
                <label>Photos: </label>
                <input type="file" id="file"/>
            </div>
            <input type="button" value="Add" id="add-movie-tvShow-btn">
        </form> 
    </div> 

这是我的 ajax 调用

let insertButton = $("#add-movie-tvShow-btn");
insertButton.on('click', function () 

let formData = new FormData();
let file = $("#file")[0].files[0];
formData.append("file", file);

        $.ajax(
            url: "http://localhost:8080/upload",
            method: "POST",
            data: formData,
            contentType: false,
            processData: false,
            success: function()
            alert("Enter success block");
                ,
            error: function()
              alert("Enter error block")  
              
        );

   );

这是处理ajax请求的方法:

@PostMapping(value = "/upload", consumes = "multipart/form-data")
public void uploadFile(@RequestParam("file") MultipartFile file, Movie movie) throws 
IOException 
    File convertFile = new File("C:\\Users\\myName\\Desktop\\" + file.getOriginalFilename());
    convertFile.createNewFile();
    FileOutputStream fout = new FileOutputStream(convertFile);
    fout.write(file.getBytes());
    movie.setImage(file.getBytes());    
    movieRepo.save(movie);
    fout.close();

它在数据库中创建数据,但我不明白为什么输入错误块?我做错了什么?

【问题讨论】:

请看看这是否对你有帮助***.com/questions/14475853/… 这应该是不可能的。在这种情况下,你的 sucess 函数根本不应该被调用,因为“成功”是两个 C 的。您的浏览器控制台是否显示任何错误? @Ivar 是的,这很奇怪,它没有显示任何错误,但即使我放了两个 C,它的行为也是一样的。 【参考方案1】:

你可以试试 preventDefault() 吗?如下所示。

insertButton.on('click', function (e) 
  e.preventDefault();

【讨论】:

嘿,这确实有效,但这是解决这个问题的最佳方法吗?我仍然不知道为什么它进入两个街区 @NemJov 如果这行得通,我很难相信你的add-movie-tvShow-btn 实际上是type="button"。带有 type="button" 的按钮应该提交表单,除非您有其他 JS 干扰。无论如何,如果您通过 AJAX 提交表单,您不妨删除&lt;form&gt; 标签以防止表单提交。 我猜你的点击功能触发了两次。可以在阻止默认值之前放置一个控制台日志来确认这一点。你可以检查这个***.com/questions/3070400/… @Ivar 我删除了表单,我也删除了`e.preventDefault();`并且代码正常工作,我认为提交多媒体类型需要一个表单。

以上是关于为啥ajax调用在每次调用时都会输入成功和错误块?的主要内容,如果未能解决你的问题,请参考以下文章

为啥每次选择另一个 TextField 时都会调用 KeyboardWillShowNotification?

Angular Service 在每次调用时都会重置

为啥每次渲染都会调用 `useEffect` 的清理功能?

每次设置状态时都会调用 Flutter 函数

每次更改页面时都会调用 React useEffect (with []) (React Router)

为啥我的函数每次调用时都会创建一个新对象?