2016-09-07 7 views
0

ReactでWikipedia Viewerを作成しようとしています。しかし、クロス・オリジンの問題のため、私のlocalhost上のWikipedia APIからデータを取得するために、通常のAjax呼び出しを行うことはできません。 Reactはjquery($)を受け入れてjquery JSON-pを使用していないようです。私も純粋なjavascriptの方法を試みたが、もし私が間違った方法をしていたかどうかわからない、それはどちらもうまくいかなかった。反応成分を使ってjson-pを達成する方法

私はどのようにJSON-p呼び出しをWikipedia APIに反応するコンポーネントから呼び出すことができるでしょうか?

私が使用したjquery JSOP APIコールです。

「jquery」のjqueryが必要です。

$ .when($アヤックス({ URL: "https://en.wikipedia.org/w/api.php?action=opensearch&format=json&redirects=return&search=" + SEARCHTERM、 データ型: 'JSONP' }。)) .then(関数(結果){...

UPDATE: jqueryが反応していますが、jqueryからimport $を使用しました。 APIコールが動作しているようですが、jquery json-pブロックからデータを取り出すことはできません。this.setStateまたはこのブロックの外にある他の関数以下は現在までの私のコードです:

import $ from 'jquery'; 
import React from 'react'; 
import { render } from 'react-dom'; 
import Searchbar from './Searchbar'; 
import ListView from './ListView'; 

class App extends React.Component { 
    constructor(){ 
    super(); 
    this.state = { 
     term: "" 
    }; 
    } 

    searchWiki(term){ 
    $.when($.ajax({ 
     url: "https://en.wikipedia.org/w/api.php?action=opensearch&format=json&redirects=return&search="+term, 
     dataType: 'jsonp' 
    })) 
    .then(function(result){ 
     console.log(result); 
     this.setState({term:term}); 
     }); 
    } 


    render(){ 


    return(
     <div> 
     <center> 
      <h1>Wikipedia Viewer</h1> 
      <Searchbar onSearchTermChange={this.searchWiki.bind(this)}/> 
       <ListView term={this.state.term}/> 
     </center> 
     </div> 
    ) 
    } 
} 

render(<App />, document.getElementById('app')) 
+0

LIKE 'し、' コールバック関数にES6構文(result)=>{}を使用していましたか?どのようにjsonpを試しましたか? jsonpはxmlhttprequestと比較して絶対に単純なので、あなたがしたことを示して、誰かがあなたが間違っていた場所を表示します。 –

+0

リアクション自体にajax apiがありません。既存のライブラリを使用する必要があります - jQueryをインポートするか、Axiosのようなより小さいhttpライブラリを使用します。反応するために、最初のajax呼び出しを作成するには、通常、 'componentDidMount'ライフサイクルメソッドで行うべきです。 –

答えて

0

Yay!私はこの問題を解決することができました。ない何をしたか - JSON-Pのjqueryのために、私はそれがwork`なかった `この

import $ from 'jquery'; 
 
import React from 'react'; 
 
import { render } from 'react-dom'; 
 
import Searchbar from './Searchbar'; 
 
import ListView from './ListView'; 
 

 
class App extends React.Component { 
 
    constructor(){ 
 
    super(); 
 
    this.state = { 
 
     term: "", 
 
     searchResult: "" 
 
    }; 
 
    } 
 

 
    searchWiki(term){ 
 

 
    $.when($.ajax({ 
 
     url: "https://en.wikipedia.org/w/api.php?action=opensearch&format=json&redirects=return&search="+term, 
 
     dataType: 'jsonp' 
 
    })) 
 
    .then((result)=>{ 
 
     console.log(result[1]); 
 

 
     this.setState({ 
 
      term: term, 
 
      searchResult: result[1] 
 
     }); 
 
     }); 
 

 

 

 
    } 
 

 

 
    render(){ 
 

 

 
    return(
 
     <div> 
 
     <center> 
 
      <h1>Wikipedia Viewer</h1> 
 
      <Searchbar onSearchTermChange={this.searchWiki.bind(this)}/> 
 
      <ListView term={this.state.searchResult}/> 
 
     </center> 
 
     </div> 
 
    ) 
 
    } 
 
} 
 

 
render(<App />, document.getElementById('app'))

関連する問題