【问题标题】:JQuery ajax GET request calls success with truncated dataJQuery ajax GET 请求调用成功并截断数据
【发布时间】: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


【解决方案1】:

我之前也遇到过同样的问题。

问题是由 API 服务器设置的错误 Content-Length 引起的。

希望这会有所帮助。

【讨论】:

  • 这实际上并没有为我解决问题,但它帮助我排除了一些问题并更好地理解了问题。到目前为止,我只能通过使用 Chrome 而不是 Firefox 来使其工作,所以我不确定是否存在与接收数据相关的一些默认浏览器行为。
【解决方案2】:

尝试在你的API服务器上设置,添加php函数set_time_limit($second);

【讨论】:

    【解决方案3】:

    我认为这基本上是因为您必须尝试encodeURIComponent()的数据编码不足,通过此功能,某些字符的每个实例将被代表UTF-8编码的一个、两个、三个或四个转义序列替换的字符(对于由两个“代理”字符组成的字符只有四个转义序列)。

    大多数错误(例如截断的数据)都可以通过这种编码解决,因为根据文档,$.ajax 函数将仅处理返回字符串的大约 50 个字符,而忽略其余字符。

    您甚至可以通过减少返回数据中的字符数来测试这一点。

    为了简短起见,您可以尝试一下

    $.ajax({
        dataType: "text",
        url: myURL,
        method: "GET",
        success: (data) => { resolve(encodeURIComponent(data)); },
        error: (err) => { reject(err); },
        timeout: 10000
    }) 
    

    这里有一些资源可以帮助您解决问题

    Jquery Fixes

    Client Side Solution

    JavaScript AJAX variables truncation issue FIX

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-17
      • 2017-01-28
      • 1970-01-01
      • 2013-07-07
      • 2014-05-12
      • 1970-01-01
      相关资源
      最近更新 更多