You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

TMDB API数据获取异常:JavaScript电影搜索功能无结果求助

问题:TMDB API搜索结果无法显示,fetch在res.json()后终止

我使用TMDB API、JavaScript、CSS和HTML搭建电影网站,实现搜索查询功能时,能收到状态码200,但调用res.json()后fetch函数就终止了,无法继续处理数据,搜索结果无法展示。

相关代码

请求URL

const BASE_URL = "https://api.themoviedb.org/3/";
const API_KEY = "api_key=9b62c3eb4a6bc8acd4e26602f16fa744";
let SEARCH_URL = BASE_URL + "search/movie?" + API_KEY + "&sort_by=popularity.desc&query=";

搜索函数

function searchMovie() {
    let f = document.getElementById('search_movie');
    f.addEventListener('submit', () => {
        let user_input = search_input.value;
        if (user_input && user_input.trim() != '') {
            let query = SEARCH_URL + user_input;
            console.log();
            getMovies(query);
        }
    });
}

Fetch函数

function getMovies(my_api) {
    main.innerHTML = '';
    fetch(my_api, {
        method: 'GET',
        cache: "no-cache",
        credentials: "same-origin",
        headers: { "Content-Type": "application/json" }
    }).then(res => res.json()).then(data => {
        let arr = data.results;
        if (arr && arr.length > 0) {
            arr.forEach(movie => {
                addMovie(movie);
            });
        }
        else {
            getMovies(MOVIE_URL, DEFAULT_PAGE);
            console.log("Can't find results");
        }
    }).catch(err => {
        console.log(err.message);
    });
}

修复方案

1. 阻止表单默认提交行为

表单提交会触发页面刷新,导致fetch请求还未处理完成就被中断。在submit事件回调中添加event.preventDefault():

function searchMovie() {
    let f = document.getElementById('search_movie');
    f.addEventListener('submit', (event) => {
        event.preventDefault(); // 阻止页面刷新
        let user_input = search_input.value;
        if (user_input && user_input.trim() != '') {
            let query = SEARCH_URL + encodeURIComponent(user_input); // 编码用户输入
            console.log(query); // 打印请求URL用于调试
            getMovies(query);
        }
    });
}

2. 编码用户输入

用户输入的空格、特殊字符会破坏URL格式,导致返回的内容不是合法JSON,res.json()解析失败。用encodeURIComponent()处理用户输入,确保URL格式正确。

3. 移除不必要的请求头

TMDB的GET请求不需要Content-Type: application/json头,这个头会干扰服务器返回内容的解析,直接移除:

function getMovies(my_api) {
    main.innerHTML = '';
    fetch(my_api, {
        method: 'GET',
        cache: "no-cache",
        credentials: "same-origin"
    }).then(res => {
        // 先验证请求是否真的成功
        if (!res.ok) {
            throw new Error(`HTTP错误!状态码: ${res.status}`);
        }
        return res.json();
    }).then(data => {
        console.log(data); // 打印返回数据,确认结构是否正确
        let arr = data.results;
        if (arr && arr.length > 0) {
            arr.forEach(movie => {
                addMovie(movie);
            });
        }
        else {
            console.log("未找到结果");
            // 注意:MOVIE_URL和DEFAULT_PAGE需确保已定义,否则注释掉下面的调用
            // getMovies(MOVIE_URL, DEFAULT_PAGE);
        }
    }).catch(err => {
        console.log(err.message);
    });
}

4. 增加调试日志

添加console.log(query)和console.log(data),可以直观看到拼接的请求URL和返回的数据结构,快速定位问题。

内容的提问来源于stack exchange,提问作者KrisHolmes

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 20:27:30