【问题标题】:SyntaxError Unexpected token < in JSON at position 0 in react.js API navigationSyntaxError Unexpected token < in JSON at react.js API 导航中的位置 0
【发布时间】:2020-06-04 06:32:07
【问题描述】:

rnmservice.js

export function getrnm({ url }) {
  return new Promise((resolve, reject) => {
    fetch(url)
      .then(res => res.json())
      .then(data => {
        resolve(data);
      });
  });
}

export async function getAllrnm(url) {
  return new Promise((resolve, reject) => {
    fetch(url)
      .then(res => res.json())
      .then(data => {
        resolve(data);
      });
  });
}

app.js

import React, { useState, useEffect } from "react";
import Navbar from "./components/Navbar";
import Card from "./components/Card/Card";
import { getrnm, getAllrnm } from "./services/rmservice";
function App() {
  const [rnmData, setRnmData] = useState([]);
  const [nextUrl, setNextUrl] = useState("");
  const [prevUrl, setPrevUrl] = useState("");
  const [loading, setLoading] = useState(true);
  const initialURL = "https://rickandmortyapi.com/api/episode/";

  useEffect(() => {
    async function fetchData() {
      let response = await getAllrnm(initialURL);
      setNextUrl(response.next);
      setPrevUrl(response.previous);
      await loadRnm(response.results);
      setLoading(false);
    }
    fetchData();
  }, []);

  const next = async () => {
    setLoading(true);
    let data = await getAllrnm(nextUrl);
    await loadRnm(data.results);
    setNextUrl(data.next);
    setPrevUrl(data.previous);
    setLoading(false);
  };

  const prev = async () => {
    if (!prevUrl) return;
    setLoading(true);
    let data = await getAllrnm(prevUrl);
    await loadRnm(data.results);
    setNextUrl(data.next);
    setPrevUrl(data.previous);
    setLoading(false);
  };

  const loadRnm = async data => {
    let _rnmData = await Promise.all(
      data.map(async rnm => {
        let rnmRecord = await getrnm(rnm);
        return rnmRecord;
      })
    );
    setRnmData(_rnmData);
  };

  return (
    <>
      <Navbar />
      <div>
        {loading ? (
          <h1 style={{ textAlign: "center" }}>Loading...</h1>
        ) : (
          <>
            <div className="btn">
              <button onClick={prev}>Prev</button>
              <button onClick={next}>Next</button>
            </div>
            <div className="grid-container">
              {rnmData.map((rnm, i) => {
                return <Card key={i} ricmor={rnm} />;
              })}
            </div>
            <div className="btn">
              <button onClick={prev}>Prev</button>
              <button onClick={next}>Next</button>
            </div>
          </>
        )}
      </div>
    </>
  );
}

export default App;

这里我的沙盒链接是 https://codesandbox.io/s/musing-thunder-frsk6 。我正在尝试使用 ricky and morty (https://rickandmortyapi.com/api/episode/) 的 API 获取数据并进行导航,但是当我单击下一步按钮时,我收到错误,因为“SyntaxError Unexpected token

【问题讨论】:

  • 你得到的响应是HTML,应该是JSON
  • 先生,我只得到 JSON 对吗?

标签: javascript reactjs api navigation


【解决方案1】:

你只需用这个替换你的useEffect

useEffect(() => {
    async function fetchData() {
      let response = await getAllrnm(initialURL);
      console.log(response.info);
      setNextUrl(response.info.next);
      setPrevUrl(response.info.previous);
      setPages(response.info.pages);
      await loadRnm(response.results);
      setLoading(false);
    }
    fetchData();
  }, []);

您正在直接访问下一个和上一个。像这样访问response.info.next,因为所有下一个/上一个进入的信息。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-07-20
    • 2021-09-30
    • 2018-08-31
    • 2018-08-27
    • 2017-12-15
    • 2022-01-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多