質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Ajax

Ajaxとは、Webブラウザ内で搭載されているJavaScriptのHTTP通信機能を使って非同期通信を利用し、インターフェイスの構築などを行う技術の総称です。XMLドキュメントを指定したURLから読み込み、画面描画やユーザの操作などと並行してサーバと非同期に通信するWebアプリケーションを実現することができます。

Q&A

解決済

3回答

826閲覧

Ruby on railsにおいてAjaxを利用した外部サイトアクセスがうまく行きません。

tsyk

総合スコア10

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Ajax

Ajaxとは、Webブラウザ内で搭載されているJavaScriptのHTTP通信機能を使って非同期通信を利用し、インターフェイスの構築などを行う技術の総称です。XMLドキュメントを指定したURLから読み込み、画面描画やユーザの操作などと並行してサーバと非同期に通信するWebアプリケーションを実現することができます。

0グッド

0クリップ

投稿2019/08/29 11:31

コードは以下のようになっております。

ajax_controller.rb

def data url = URI('http://news.yahoo.co.jp/pickup/rss.xml') http = Net::HTTP.new(url.host) response = http.get(url) @data = Hash.from_xml(response.body).to_json.html_safe end

index.html.erb

<h1>Ajax#index</h1> <p>※AjaxによるYahoo!ニュースのヘッドライン取得サンプル。</p> <hr> <div id="result">no information...</div> <script> var f function(){ $.ajax({ type: 'GET', url: '/ajax/data' }); }; setTimeout(f, 600000); f(); </script>

data.js.erb

var data = <%= @data %>; var result = '<table class="info">'; result += '<tr><th class="title">' + data.rss.channel.title + '</th></tr>'; result += '<tr><td class="desc">' + data.rss.channel.description + '</td></tr>' data.rss.channel.item.forEach(function(e){ result += '<tr><td class="item"><a href="' + e.link + '" target="_blank">' + e.title + '</a></td></tr>'; }); result += '</table>' $('#result').html(result);

ajax.html.erb

<!DOCTYPE html> <html> <head> <title>Cards</title> <%= csrf_meta_tags %> <%= stylesheet_link_tag 'ajax', 'data-turbolinks-track': 'reload' %> <%= javascript_include_tag 'application', 'data-turbolinks-track': 'reload' %> </head> <body> <div class="card"> <%= yield %> </div> </body> </html>

routes.rb

get 'ajax/data'

OSはwindow8です。

Ruby on rails5入門書に沿って書きました。
コードに誤り、あるいはコードが足りていないのでしょうか。お分かりの方お教えください。不足している情報があれば仰ってください。よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

Net::HTTPを利用するときのこの部分ですが

ruby

1http = Net::HTTP.new(url.host)

url.host は何が入るかというとurlのホスト名、この場合ですと news.yahoo.co.jp です。
Net::HTTPはデフォルトでは80ポート(http)への通信を行うため、URIの部分をhttpsに書き換えてもこのままでははhttpに接続されます。
httpsへ接続するには、

  • Net::HTTP.newの第2引数にポート番号を指定する
  • 上で作ったオブジェクトに対して use_ssl = true を指定する

が必要になります。

ruby

1http = Net::HTTP.new(url.host, url.port) 2http.use_ssl = true

https://docs.ruby-lang.org/ja/latest/class/Net=3a=3aHTTP.html

投稿2019/09/07 16:07

8zca

総合スコア559

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tsyk

2019/09/09 13:23

返信ありがとうございます。 上記のコードを追記したところ無事表示されました。あきらめかけていましたので本当に嬉しいです。ありがとうございました。
guest

0

http ではリダイレクトが発生しているようなので、 https にするべきかと思います。

def data # url = URI('http://news.yahoo.co.jp/pickup/rss.xml') url = URI('https://news.yahoo.co.jp/pickup/rss.xml') end

投稿2019/09/04 01:50

編集2019/09/04 01:51
unhappychoice

総合スコア1531

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tsyk

2019/09/07 14:31

httpsにしましたが変わりませんでした。
guest

0

うまくいかないとはどういうことでしょうか?
エラーになるのであればエラーの内容も記載してください

投稿2019/08/29 23:35

satoshih

総合スコア797

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tsyk

2019/08/30 08:05

うまく行かないというのは表示されないということです。エラーは出ておりません。
satoshih

2019/08/30 08:33

AjaxでRailsへアクセスはできていますか?(Railsログは出ていますか?) そもそもAjaxのレスポンスをどのように使う要諦ですか?(レスポンスを受け取っていないように見えますが)
tsyk

2019/09/01 15:43

AjaxでRailsへアクセスはできております。 Railsログはこのようになっております。 REXML::ParseException (The document "" does not have a valid root): app/controllers/ajax_controller.rb:11:in `data' Yahooニュースのヘッドライン情報を取得して表示させたいです。
satoshih

2019/09/02 01:12

Railsでエラーが発生していますね。。。 REXML::ParseException (The document "" does not have a valid root): app/controllers/ajax_controller.rb:11:in `data' はXMLとして解析できない旨のエラーなので コントローラーの url = URI('http://news.yahoo.co.jp/pickup/rss.xml') http = Net::HTTP.new(url.host) response = http.get(url) で返ってきている値がXMLじゃないようですね。 レスポンスを見たところリダイレクト(http status 301)が返ってきているようです。 リダイレクトに対応してください。
tsyk

2019/09/02 15:50

申し訳ありません。どのように対応したらよいのでしょうか。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問