【发布时间】:2020-09-22 15:36:17
【问题描述】:
我正在尝试通过 JQuery ajax GET 请求从我的服务器检索大量数据。返回的数据被截断(见下图)。当我通过 Web 浏览器直接导航到 URL 发出相同的请求时,我得到了完整的响应,它是一个 JSON 对象(见下图)。
我最初将 ajax 调用中的 dataType 选项设置为“json”,但我将其切换为“text”,因为触发了 ajax 错误函数(无法解析截断的 json)。现在它调用了success函数,尽管它还没有完成接收数据。
还有几点值得注意:有时它会工作并加载所有数据,但大部分时间仍然会失败。我正在使用 Node.js/Express 服务器和 res.json() 发送响应对象。
代码:
$.ajax({
dataType: "text",
url: myURL,
method: "GET",
success: (data) => { resolve(data); },
error: (err) => { reject(err); },
timeout: 1000000
})
【问题讨论】:
-
由于请求花费的时间太长,您的超时被击中。简短的解决方法是增加超时。更好的解决方法是重新设计您的网站,这样您就不需要下载如此荒谬的数据量。在服务器端使用分页/过滤/搜索仅显示用户相关数据。
-
@RoryMcCrossan 我不认为这是超时,因为它只需要等待约 5 秒的响应,我将超时设置为 100 秒。我尝试将“接收”时间增加到 1,000 秒,以防“接收”时间是超时的一部分,但我仍然遇到同样的问题。
-
即使将超时设置为 0,根据 jQuery 文档,这使得它没有超时,也不能解决问题。
-
您是否尝试过将
fetch()仅用于测试目的?您能否提供您的服务器发送的示例数据,或使用虚拟值复制数据,以便我们希望重现该问题? -
我尝试在 Chrome 中加载页面,它似乎运行可靠。不知何故,它似乎并没有截断数据。不是最好的解决方法,但可能是一个有用的线索。
标签: javascript jquery node.js ajax express