Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/421.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 显示来自API搜索调用的数据(来自TMDB)_Javascript_Reactjs_Api - Fatal编程技术网

Javascript 显示来自API搜索调用的数据(来自TMDB)

Javascript 显示来自API搜索调用的数据(来自TMDB),javascript,reactjs,api,Javascript,Reactjs,Api,我从中查找搜索函数,并尝试应用到我的搜索url,这是一个对TMDB数据库的api调用,带有一个深分支响应。 搜索结果如下所示: { }{ “页码”:1, “总结果”:141, “总页数”:8页, “结果”:[ { “计票”:14162, “人气”:40.812, “id”:272, “视频”:假, “媒体类型”:“电影”, “平均投票数”:7.7, “标题”:“蝙蝠侠开始”, “发布日期”:“2005-06-10”, “原始语言”:“en”, “原始标题”:“蝙蝠侠开始”, “类型识别码”:[

我从中查找搜索函数,并尝试应用到我的搜索url,这是一个对TMDB数据库的api调用,带有一个深分支响应。 搜索结果如下所示: { }
{
“页码”:1,
“总结果”:141,
“总页数”:8页,
“结果”:[
{
“计票”:14162,
“人气”:40.812,
“id”:272,
“视频”:假,
“媒体类型”:“电影”,
“平均投票数”:7.7,
“标题”:“蝙蝠侠开始”,
“发布日期”:“2005-06-10”,
“原始语言”:“en”,
“原始标题”:“蝙蝠侠开始”,
“类型识别码”:[
28,
80,
18
],
“背景路径”:“/lh5lbisD4oDbEKgUxoRaZU8HVrk.jpg”,
“成人”:假,
《概述》:“在悲剧的驱使下,亿万富翁布鲁斯·韦恩(Bruce Wayne)毕生致力于揭露和击败困扰其家乡高谭市的腐败。由于无法在体制内工作,他反而创造了一个新身份,一个对犯罪黑社会的恐惧象征——蝙蝠侠。”,
“海报路径”:“/aGdng8Ic4ONpcepU3bVXPSLmNd3.jpg”
},
{
“原名”:“蝙蝠侠”,
“类型识别码”:[
35,
10759,
10765
],
“媒体类型”:“电视”,
“姓名”:“蝙蝠侠”,
“人气”:24.871,
“来源国”:[
“美国”
],
“计票”:153,
“首次飞行日期”:“1966-01-12”,
“背景路径”:“/gpJZiTvklr5JN0mzpQwl99peQD7.jpg”,
“原始语言”:“en”,
“id”:2287,
“平均投票数”:7.1,
“概览”:"富有的企业家布鲁斯·韦恩(Bruce Wayne)和他的病房迪克·格雷森(Dick Grayson)过着双重生活:他们实际上是打击犯罪的二重唱蝙蝠侠(Batman)和罗宾(Robin)。韦恩豪宅中的一根秘密蝙蝠杆通向蝙蝠洞,警察局长戈登经常打电话给蝙蝠洞,通报威胁高谭市的最新紧急情况。蝙蝠侠在蝙蝠车(Batmobile)中追逐犯罪现场罗宾必须(在他们可靠的蝙蝠实用腰带的帮助下)挫败各种主要罪犯的努力,包括谜语者、小丑、猫女和企鹅。”,
“海报路径”:“/1ZEJuuDh0Zpi5ELM3Zev0GBhQ3R.jpg”
},
{
“海报路径”:“/xVaHD9sgzwE129UcdhMtwyhndYj.jpg”,
“人气”:21.393,
“计票”:4657,
“视频”:假,
“媒体类型”:“电影”,
“id”:268,
“成人”:假,
“背景路径”:“/rbn6gpkudzkqiezegz0dzb6v.jpg”,
“原始语言”:“en”,
“原始标题”:“蝙蝠侠”,
“类型识别码”:[
28,
14
],
“头衔”:“蝙蝠侠”,
“平均投票数”:7.2,
《概述》:“高谭市的黑暗骑士开始了他的犯罪之战,他的第一个主要敌人是小丑般的杀人小丑,他控制了高谭市的黑社会。”,
“发布日期”:“1989-06-23”
},
{
“原名”:“蝙蝠侠”,
“类型识别码”:[
16,
9648,
10759,
10765
],
“媒体类型”:“电视”,
“名字”:“蝙蝠侠”,
“人气”:27.069,
“来源国”:[
“美国”
],
“计票”:74,
“首次发布日期”:“2004-09-11”,
“U路径”:空,
“原始语言”:“en”,
“id”:2022年,
“平均投票数”:7.5,
“概述”:《蝙蝠侠》是华纳兄弟公司根据DC漫画超级英雄《蝙蝠侠》制作的一部美国动画电视连续剧。该剧于2004年9月11日至2008年3月22日在星期六上午电视台儿童WB播出。\n\n尽管该剧借用了以前蝙蝠侠故事情节的许多元素,但没有遵循漫画书、电影系列,也不是蝙蝠侠:动画系列及其衍生产品。角色设计由成龙历险艺术家杰夫·松田(Jeff Matsuda)提供;他还导演了结局。该系列获得了六项日间艾美奖。”,
“海报路径”:“/QTYUK6HYHXEUMIVI6KJZOKM2W4.jpg”
},
{
“海报路径”:“/bsg0mrxUKyJoL4oSGP5mlhEsqp.jpg”,
“人气”:22.591,
“计票”:3201,
“视频”:假,
“媒体类型”:“电影”,
“id”:415,
“成人”:假,
“背景路径”:“/tgPFZxhDuxWd4VXYaz8eAUznGTF.jpg”,
“原始语言”:“en”,
“原始标题”:“蝙蝠侠与罗宾”,
“类型识别码”:[
28,
35,
14,
878
],
“标题”:“蝙蝠侠与罗宾”,
“平均投票数”:4.3,
《概述》:“蝙蝠侠与打击犯罪的搭档罗宾和新招募的蝙蝠侠一起,与冷酷天才弗雷兹先生和杀人园艺家毒藤的双重威胁作斗争。弗雷兹计划将高谭城置于冰上,而艾藤则试图在这对活力四射的二人之间挑拨离间。”,
“发布日期”:“1997-06-20”
},

import './stylesheetSearch.css'
import axios from 'axios';
import Loader from './loader.gif'
import PageNavigation from "./PageNavigation";
import Table from "@material-ui/core/Table";
import TableHead from "@material-ui/core/TableHead";
import TableRow from "@material-ui/core/TableRow";
import TableCell from "@material-ui/core/TableCell";
import TableBody from "@material-ui/core/TableBody";
import DeleteIcon from "@material-ui/icons/Delete";
class Search extends Component{
    constructor(props) {
        super(props);
        this.state={
            query:'',
            results:{},
            loading: false,
            message:'',
            totalResults: 0,
            totalPages: 0,
            currentPageNo: 0,


        }
        this.cancel = '';
    }


    //////
    handleOnInputChange = ( event ) => {
        const query = event.target.value;
        if ( ! query ) {
            this.setState( { query, results: {}, message: '', totalPages: 0, totalResults: 0 } );
        } else {
            this.setState( { query, loading: true, message: '' }, () => {
                this.fetchSearchResults( 1, query );
            } );
        }
    };

    fetchSearchResults = ( updatedPageNo = '', query ) => {
        const pageNumber = updatedPageNo ? `&page=${updatedPageNo}` : '';
        const searchUrl = `https://api.themoviedb.org/3/search/multi?api_key=(input api key)&query=${query}${pageNumber}`;
////we wanr to search only when we finished typing
        //we use a cancel token to cancel the request before we finish typing
        if( this.cancel ) {
            this.cancel.cancel();
        }

        this.cancel = axios.CancelToken.source();

        axios.get( searchUrl, {
            cancelToken: this.cancel.token
        } )
            .then( res => {
                const total = res.data.total;
                console.warn(res.data);
                const totalPagesCount = this.getPageCount( total, 20 );
                const resultNotFoundMsg = ! res.data.hits.length
                    ? 'There are no more search results. Please try a new search'
                    : '';
                this.setState( {
                    results: res.data.hits,
                    message: resultNotFoundMsg,
                    totalResults: total,
                    totalPages: totalPagesCount,
                    currentPageNo: updatedPageNo,
                    loading: false
                } )
            } )
            .catch( error => {
                if ( axios.isCancel(error) || error ) {
                    this.setState({
                        loading: false,
                        message: 'Failed to fetch the data. Please check network'
                    })
                }
            } )
    };
///methid to loop through array of results

    renderSearchResults = () => {
        const { results } = this.state;

                    if ( Object.keys( results ).length && results.length ) {
                        return (
                            <div className="results-container">
                                {this.state.results.map(result => {
                                    return (
                                        <h3 key={result.id}  className="result-item">
                                            <h6 className="image-username">{result.title}</h6>

                                        </h3>
                                    )
                                })}


                            </div>
                        )
                    }
    }

    getPageCount = ( total, denominator ) => {
        const divisible = 0 === total % denominator;
        const valueToBeAdded = divisible ? 0 : 1;
        return Math.floor( total/denominator ) + valueToBeAdded;
    };
    handlePageClick = ( type ) => {
       // event.preventDefault();
        const updatePageNo = 'prev' === type
            ? this.state.currentPageNo - 1
            : this.state.currentPageNo + 1;

        if( ! this.state.loading  ) {
            this.setState( { loading: true, message: '' }, () => {
                this.fetchSearchResults( updatePageNo, this.state.query );
            } );
        }
    };

    render()
    {
        const { query, loading, message, currentPageNo, totalPages } = this.state;

        const showPrevLink = 1 < currentPageNo;
        const showNextLink = totalPages > currentPageNo;
        return(

          <div className="container">
              {/*Heading*/}
              <h2 className="heading">Live Search for movies</h2>
              {/*Search Input*/}
              <label className="search-labe" htmlFor="search-input">
                  <input type="text"  value={query} id="search-input" placeholder="Search...." name="query"
                      onChange ={this.handleOnInputChange}
                  />
                  <i className="fas fa-search" aria-hidden="true"></i>
              </label>


              {/*   Error Message*/}
              {message && <p className="message">{ message }</p>}

              {/*   Loader*/}
              <img src={ Loader } className={`search-loading ${ loading ? 'show' : 'hide' }`} alt="loader"/>
              {/*Navigation*/}
              <PageNavigation
                  loading={loading}
                  showPrevLink={showPrevLink}
                  showNextLink={showNextLink}
                  handlePrevClick={ () => this.handlePageClick('prev')}
                  handleNextClick={ () => this.handlePageClick('next' )}
              />

              {/*   Result*/}
              { this.renderSearchResults() }


              {/*Navigation*/}
              <PageNavigation
                  loading={loading}
                  showPrevLink={showPrevLink}
                  showNextLink={showNextLink}
                  handlePrevClick={ () => this.handlePageClick('prev')}
                  handleNextClick={ () => this.handlePageClick('next' )}
              />

          </div>
        );
    }


}
export  default Search;
import./stylesheetSearch.css'
从“axios”导入axios;
从“./Loader.gif”导入加载程序
从“/PageNavigation”导入页面导航;
从“@物料界面/核心/表格”导入表格;
从“@material ui/core/TableHead”导入表头;
从“@material ui/core/TableRow”导入TableRow;
从“@material ui/core/TableCell”导入TableCell;
从“@material ui/core/TableBody”导入表体;
从“@material ui/icons/Delete”导入DeleteIcon;
类搜索扩展组件{
建造师(道具){
超级(道具);
这个州={
查询:“”,
结果:{},
加载:false,
消息:“”,
结果:0,
总页数:0,
当前页面编号:0,
}
这个。取消=“”;
}
//////
handleOnInputChange=(事件)=>{
const query=event.target.value;
如果(!查询){
this.setState({query,results:{},消息:“”,totalPages:0,totalResults:0});
}否则{
this.setState({query,load:true,消息:'},()=>{
this.fetchSearchResults(1,查询);
} );
}
};
fetchSearchResults=(updatedPageNo=“”,查询)=>{
欺骗