【问题标题】:"JSONValue failed" Error while fetching data from server into iPhone将数据从服务器提取到 iPhone 时出现“JSONValue failed”错误
【发布时间】:2011-04-21 05:20:17
【问题描述】:

我正在从服务器获取数据到我的 iPhone 应用程序中。

为了从服务器获取数据,我使用的是 HTTP Post 方法,为了解析获得的数据,我使用的是 SBJSON Parser。

当我的应用第一次启动时,没有获取数据。

它在控制台中显示以下失败日志。应用不会崩溃,只是不会获取该数据。

<html>Your request timed out.  
Please retry the request.                                                                                                 </html>
2011-04-21 08:39:06.339 Hive[1594:207] -JSONValue failed. Error trace is: (
    "Error Domain=org.brautaset.JSON.ErrorDomain Code=3 \"Unrecognised leading character\"   UserInfo=0x4cabe90 {NSLocalizedDescription=Unrecognised leading character}"
)

应用程序从第二次开始正确获取数据。只有在应用程序第一次运行时才会出现此错误。

可能出了什么问题?

【问题讨论】:

  • 您的请求已超时。 。这是来自服务器的响应字符串吗?如果是,那么您第一次没有收到 JSON 响应。(正如您所说的问题仅在第一次出现)。
  • 看看你是否可以用其他客户端重现这种行为(例如curl(1))。看起来像是服务器问题。
  • @Ravin:是的,我知道。但为什么会发生呢?
  • 如果您向相同的 url 发送相同的请求并且它正在发生,那么正如 @Bavarious 所说,这可能是服务器问题。

标签: iphone objective-c cocoa-touch json http-post


【解决方案1】:

如果不分析服务器及其资源,就很难确定服务器响应时间过长的原因。

要考虑的一件事是,在您上次尝试 JSON 和下一次“第一次尝试”之间相隔多长时间。也许然后看看你是否使用网络浏览器重新创建它。

服务器是生产质量服务器吗?如果不是,则响应第一个请求可能会“启动”,第一个响应需要很长时间。

就我个人而言,我编写了一个通用的 JSON 提要类,它有一个失败重试选项。如果它没有收到任何或无效的 JSON,它将根据您传递的内容以 y 秒的间隔重试 x 次。最初需要更多的工作,但它会得到回报,原因有两个。

1) 它可以反复重复使用,并且可以在单个文件中进行更新,例如使用 ASIHTTRequest,如 Terente 的好建议。

2) 虽然您可能不会期望响应失败,但可能会出现服务器缓慢或网络问题,从而导致响应有缺陷。

【讨论】:

    【解决方案2】:

    您可以使用ASIHTTRequest,如果超时,请尝试向服务器发出新请求。

    【讨论】:

      猜你喜欢
      • 2018-01-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-28
      相关资源
      最近更新 更多