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

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

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

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

Ajax

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

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

Q&A

解決済

1回答

1218閲覧

自作APIのレスポンスを扱えない

ddd8

総合スコア19

Ruby on Rails 5

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

Ajax

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

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

0グッド

0クリップ

投稿2018/10/25 13:51

Railsで自作APIを作りました。
それをAjaxを使ってクライアント側で処理しようと思い、試しに以下のコードを作成しました。
正常に動けば、APIからのレスポンスデータを使ってテキストを変更するコードです。

しかし、自作APIからのレスポンスデータでテキストを変更できませんでした。
比較のため他のサービスのAPIからのレスポンスデータで試みたところ正常にテキストが変更されました。

ブラウザでリクエストを送ると自作APIからもjsonデータが返ってきているみたいなのでAPIサーバ側は正常に動いていそうで原因がわからず困っております。

どこに問題があるのでしょうか。

html

1 2<!DOCTYPE html> 3<html> 4<head> 5 <title>API</title> 6 <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> 7</head> 8<body> 9<button class="btn">btn</button> 10<h1 class="text">text</h1> <!-- 変更するテキスト--> 11<script type="text/javascript"> 12$(document).ready(function(){ 13 const url = 'https://floating-crag-25693.herokuapp.com/timecards'; // 自作API 14 //const url = 'https://jsonplaceholder.typicode.com/posts';     // 比較用API 15 $('.btn').click(function(){ 16 $.ajax({ 17 url: url, 18 type:"GET", 19 success: function(result){ 20 $('.text').text(`${result}`); 21 }, 22 error:function(error){ 23 console.log(`Error ${error}`); 24 } 25 }) 26 }) 27}) 28</script> 29</body> 30</html>

参考までにrailsのコードの一部も掲示します。

ruby

1class TimeCardsController < ApplicationController 2 def index 3 @timecards = TimeCard.all 4 render json: @timecards 5 end 6 7 def show 8 @timecard = TimeCard.find(params[:id]) 9 render json: @timecard 10 end 11 12 def create 13 @timecard = TimeCard.new(state:params[:state]) 14 15 if @timecard.save 16 render json: @timecard, status: :created, location: timecards_url(@timecard) 17 else 18 render json: @timecard.errors, status: :unprocessable_entity 19 end 20 end 21 22 23 private 24 25 def timecard_params 26 params.fetch(:timecards, {}).permit(:state) 27 end 28end

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

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

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

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

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

guest

回答1

0

ベストアンサー

ブラウザでJavaScriptを動かすとき、ブラウザの「クロスドメイン制約」という仕様のため、ウェブサイトのドメイン以外のURLにはリクエストできません。
おそらくその制約にひっかかっているのでは。

投稿2018/10/25 14:00

mrkmyki

総合スコア325

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

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

ddd8

2018/10/25 14:12

まさしく、クロスドメイン制約によるものでした。 ブラウザのクロスドメイン制約を外したところ正常にテキストが変更されました。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問