реагировать на собственный http-запрос JSON Parse error - PullRequest
1 голос
/ 04 октября 2019
  1. ошибка возникает иногда, но не постоянно. (Я продолжаю нажимать перезагрузить , пока она не вернется в нормальное состояние)
  2. ошибка возникает на эмуляторе Android, но никогда на iphone.

Ошибка синтаксического анализа JSON: ожидается'}' tryCallOne C: \ Users \ xxx \ node_modules \ обещание \ setimmediate \ core.js: 37: 14 C: \ Users \ xxx \ node_modules \ обещание \ setimmediate \ core.js: 123: 25 _callTimer C: \ Users \xxx \ node_modules \ react-native \ Libraries \ Core \ Timers \ JSTimers.js: 152: 14 _callImmediatesPass C: \ Users \ xxx \ node_modules \ реагировать-native \ Libraries \ Core \ Timers \ JSTimers.js: 200: 17 callImmediates C: \ Users \ xxx \ node_modules \ react-native \ Libraries \ Core \ Timers \ JSTimers.js: 473: 30 __callImmediates C: \ Users \ xxx \ node_modules \ реагировать-native \ Libraries \ BatchedBridge \ MessageQueue.js: 337: 6C: \ Users \ xxx \ node_modules \ реагировать-native \ Libraries \ BatchedBridge \ MessageQueue.js: 135: 6 __guard C: \ Users \ xxx \ node_modules \ реагировать-native \ Libraries \ BatchedBridge \ MessageQueue.js: 314: 10 flhedQueueC: \ Users \ xxx \ node_modules \ react-native \ Libraries \ BatchedBridge \ MessageQueue.js: 134: 17

это просто очень типичный http-запрос

  fetchArticle(id) {
    fetch("http://domain/api/articles/"+id)
      .then(res => res.json())
      .then(
        (result) => {
          console.log(result);
          image_path = result.image_path;
          data = result.data;
          images = [];
          data.slides.forEach(function (el, index) {
           var image = image_path + "/" + el;
           //console.log(image);
           images.push({url:image});
          });
          this.setState({
            isLoaded: true,
            data: data,
            image_path: image_path,
            images: images,
          });
          //console.log(this.state.data);
          //console.log(this.state.images);
        },
        (error) => {
          console.error(error);
          this.setState({
            isLoaded: true,
          });
        }
      )
  }

Я понятия не имею, что с ним не так. пожалуйста помоги. спасибо!

обновлено:

Данные ответа API

{"id": 1, "title": "\ u9999 \ u6e2f \ u53cd \ u4fee \u4f8b \ u98a8 \ u6ce2 \ u6301 \ u7e8c \ uff0c \ u4e0d \ u5c11 \ u6e2f \ u5546 \ u7a4d \ u6975 \ u90e8 \ u7f72 \ u64f4 \ u5f35 \ u6d77 \ u5916 \ u696d \ u52d9 \ uff0c \ u5206 \ u6563 \ u98a8 \ u96aa \u3002 "," heart ": 1," address ":" rewerfwr fdsf sdfsdf sdf "," content ":"

擬 申請 「園 家園」 \ r \ n 《蘋果》 早前 到 到 訪問 當地 電 電商 情況, 近年 中國 科網 龍頭 大舉 進軍 當地 市場,

如 龍頭 Shopee (創辦 人為 天津人 李小冬) 及 Lazada (2016 年 被 阿里巴巴 收購), 淘 寶 亦 十分 流行, 市場 亦有 Lelong.myAre Are , 競爭 相當 激烈 r r r r r 樓上 樓上 樓上 樓上 樓上 樓上 樓上 樓上 Are Are Are Are Are Are Are Are Are AreКрасный 」聯合 創辦 人 楊舒文 表示, 由於 舖 租 僅 +1000 元 令吉 (約 港元 одна тысяча восемьсот семьдесят девять), 惟 距離 市區 較遠, 要靠 網上 吸引 客人; 她 指 對比 不少 當地 盛行 的 電 商,「 客人 見到產品 的 同時

亦會 見到 其他 同 款 產品, 好容易 淨 比較 價錢 而 冇 考慮 質素 」. 而 掌 舖 可 直接 將 商品 上載到 網上 製成 獨立 網頁, 所以 深受 不懂網頁 製作 的 店主 歡迎. \ г \ п

\ г \ п 吳家嘉 提到, 大馬 「第二 家園」 計劃 近日 成為 香港 熱門 話題, 他 指 如 當地 業務 成熟, 亦會 考慮 申請.

\ n "," fee ":" \ u7531 \ u5225 \ u9598 \ u53e3 \ u5c01 \ u9589 "}

я пробовал другой некитайский запрос стот же вызов API (другой идентификатор), и он не имеет ошибки синтаксического анализа json на эмуляторе Android. Поэтому я подозреваю, что это связано с проблемой UTF8 или charset.

1 Ответ

0 голосов
/ 04 октября 2019

Похоже, что ответ не отправляет объект для анализа. Проверка res.status перед выполнением res.json () будет полезна для предотвращения этой ошибки. Я не знаю, является ли это вашим собственным API, но если вы ожидаете объект только после успешного выполнения запроса, попробуйте установить статус ответа в бэкэнде (скажем, 201) и проверить, еслиres.status равен 201, прежде чем выполнять res.json ().

Конечно, если вы также ожидаете объект, когда запрос не удался в некоторых конкретных случаях, сделайте то же самое для ошибок и установите статус ответачтобы проверить перед входом перед выполнением res.json ()

После того, как это будет сделано, вы можете console.log res.status, когда вышеуказанные условия не выполнены, и, возможно, поделиться результатом, чтобы мыможет помочь вам выяснить, что случилось?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...