javascript - 为什么我的 ajax 调用在第二次调用时使页面无响应?
问题描述
我有一个如下的ajax调用。它在第一次通话时工作正常。但是当我第二次调用它时,它使页面无响应。我不知道为什么。这存在于文档就绪调用中。我的后端在第二次尝试中被调用,但它陷入了成功。我是这样称呼它的。
$('#upload-form').submit(function (event) {
event.preventDefault();
uploadPDF();
});
这是我进行ajax调用的方法。
function uploadPDF() {
var form = $('#upload-form')[0];
var data = new FormData(form);
/* call to upload api */
$.ajax({
type: "POST",
enctype: 'multipart/form-data',
url: "/uploadPdf",
data: data,
processData: false,
contentType: false,
cache: false,
async: false,
timeout: 600000,
success: function (data) {
$('#upload-form').trigger("reset");
$('#courses-container').show().siblings().hide();
var toastHTML = '<span>' + data.success + '</span>';
M.toast({
html: toastHTML,
classes: 'teal lighten-1'
});
},
error: function (textStatus, errorThrown) {
$('#upload-form').trigger("reset");
var toastHTML = '<span>' + textStatus.responseJSON.error +
'</span>';
M.toast({
html: toastHTML,
classes: 'red lighten-1'
});
}
});
}
解决方案
async: false
使它成为一个同步请求。它冻结浏览器,直到请求完成。此功能在现代浏览器上已弃用,不应在现代代码中使用。
同步 XHR 请求通常会导致 Web 挂起。但开发人员通常不会注意到这个问题,因为挂起仅在网络条件不佳或远程服务器响应缓慢时才会出现。同步 XHR 现在处于弃用状态。建议开发人员不要使用同步 API,而是使用异步请求。
推荐阅读
- mongodb - 使用 mongoDB 聚合使用数组文档填充对象,保留该对象中的键
- r - 在 R 中,帮助将常规表格转换为带边框的 ggplot 表格?
- go - Go YouTube API:用什么代替 liveBroadcasts.control 方法来显示石板?
- instruments - 如何在 Xcode 13 / iOS15 中测量能源使用情况?
- reactjs - 如何防止在错误按钮上提交表单并且只在右键上工作
- spring-boot - @cachePut 用于 Spring Boot 中对象列表中的数据更新
- c++ - 无法使用 lldbbridge.py 来检查 Qt 对象,因为“包装器前缀”中的错误
- r - 地理编码:找到两组位置之间距离的有效方法
- javascript - Var 变量是否会从 IIFE 中取出?
- node.js - 使用 Mongoose .find() 在 EJS 模板中渲染数据