【问题标题】:jQuery $.get response is different when Infinity is in the response当 Infinity 在响应中时,jQuery $.get 响应不同
【发布时间】:2015-11-10 00:31:36
【问题描述】:

我有一个返回两个数字作为响应的 API。例如,如果我调用这个

$.get('/api/get_limit/').always(function(data) { console.log(data.responseText); });

我希望在控制台中看到类似的内容

Object {absolute_limit: 389, concurrent_limit: 999}

这是我得到的,除非这些数字之一是无穷大。在这种情况下,当我发出相同的请求时,控制台会显示

Object {readyState: 4, responseText: "{"absolute_limit":Infinity,"concurrent_limit":999.0}", status: 200, statusText: "OK"}

我检查过,API 在这两种情况下都按预期工作。

我的问题是为什么会发生这种情况,有没有办法可以解决这个问题而不用类似 -1 的东西代替 Infinity?

编辑:

借助 Django Rest Framework 生成 API 的 Django 代码

class QueriesLimit(APIView):
    def get(self, request, format=None):
        limit = request.user.concurrency_limit()
        abs_limit = request.user.available_queries()
        return Response({'concurrent_limit': limit, 'absolute_limit': abs_limit})

【问题讨论】:

  • 能否添加生成 JSON 的 API 代码?
  • 当返回值是(应该是)JSON 时,为什么要使用$.get()PHP: How to encode infinity or NaN numbers to JSON?
  • 不要尝试手动编码 JSON - 您应该使用可用的库将您的字典/数组编码为 JSON。对python不太熟悉,这看起来像你应该使用的:docs.python.org/2/library/json.html
  • @Adam 我没有手动编码。我将它传递给 Python 对象,APIView 类将负责编码。问题似乎在于 Infinity 不是有效的 JSON 值
  • @zanderle - 如果它正确编码,那么它会将Infinity 编码为"Infinity",因为 JSON 字符串需要双引号。所以它显然没有正确编码。

标签: javascript jquery


【解决方案1】:

原因

{
    "absolute_limit": Infinity,
                      ^^^^^^^^
    "concurrent_limit": 999.0
}

不是json对象

【讨论】:

  • 是的,大概就是这样。那么你将如何通过 Infinity?
  • 也许用 special value 替换 Infinity 值
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-04
  • 1970-01-01
相关资源
最近更新 更多