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

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

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

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Ajax

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

Q&A

解決済

2回答

293閲覧

ajax通信の書式について

shiro_momo

総合スコア8

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Ajax

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

0グッド

1クリップ

投稿2017/11/20 09:30

編集2017/11/20 11:51

###前提・実現したいこと
HTMLでぺら1サイトを作っています。
li内のボタンを押すと指定のサーバーへ情報を送るシステムを実装したいです。
「#btn_1」をクリックすると「192.168.111.111/api」へ「btn:A」「pc:1」「lang:jp」、
「#btn_2」をクリックすると「192.168.111.111/api」へ「btn:B」「pc:1」「lang:jp」、
「#btn_3」をクリックすると「192.168.111.111/api」へ「btn:C」「pc:1」「lang:jp」
という情報を送りたいです。

###発生している問題・エラーメッセージ
そもそも書き方がわからず混乱しております。
下記のようなコードを書いてみましたがこれで機能するのでしょうか?
また、これだと冗長すぎると思うのですが短くまとめられるところはありますか?

###該当のソースコード

<script> $( function() { $( '#btn_1' ) .click( function() { var hostUrl= 'http://192.168.111.111/api'; var param1 = "A"; var param2 = 1; var param3 = "jp"; $.ajax({ url: hostUrl, type:'POST', dataType: 'json', data : {btn : param1, pc : param2, lang : param3 }, }) }); $( '#btn_2' ) .click( function() { var hostUrl= 'http://192.168.111.111/api'; var param1 = "B"; var param2 = 1; var param3 = "jp"; $.ajax({ url: hostUrl, type:'POST', dataType: 'json', data : {btn : param1, pc : param2, lang : param3 }, }) }); $( '#btn_3' ) .click( function() { var hostUrl= 'http://192.168.111.111/api'; var param1 = "C"; var param2 = 1; var param3 = "jp"; $.ajax({ url: hostUrl, type:'POST', dataType: 'json', data : {btn : param1, pc : param2, lang : param3 }, }) }); } ); </script> <ul id="list"> <li id="button_1" ><img src="/img/jp/JP1.png" width="345px" alt="" id="title_1"></li> <li id="button_2"><img src="/img/jp/JP2.png" width="345px" alt="" id="title_2"></li> <li id="button_3"><img src="/img/jp/JP3.png" width="345px" alt="" id="title_3"></li> </ul>

ご回答ありがとうございます。
masaya_ohashi様とyambejp様のものをヒントにし、組み直してみました(データの型も修正しています。)。
switchで切り替える手法も取り入れてみたいと思います。
こちら、おかしいところありますでしょうか。

<script> $(".ajax_send") .click(function() { var _this = this; var pramObj = new Object({ "btn":$(_this).data('post-btn'), "pc":$(_this).data('post-pc'), "lang":$(_this).data('post-lang') }); parseInt($(this).data('post-pc')) + "&lang=" + $(this).data('post-lang'); $.ajax({ url:hostUrl, type:'POST', dataType:'text', data:pramObj, }).done(function(data) { }).fail(function(XMLHttpRequest, textStatus, errorThrown) { }).always(function( jqXHR, textStatus ) { }); }); }); </script> <li id="button_1" class="ajax_send" data-post-btn="A" data-post-pc="1" data-post-lang="jp"><img src="/img/jp/JP1.png" width="345px" alt="" id="title_1"></li> <li id="button_2" class="ajax_send" data-post-btn="B" data-post-pc="1" data-post-lang="jp"><img src="/img/jp/JP2.png" width="345px" alt="" id="title_2"></li> <li id="button_3" class="ajax_send" data-post-btn="C" data-post-pc="1" data-post-lang="jp"><img src="/img/jp/JP3.png" width="345px" alt="" id="title_3"></li>

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

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

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

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

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

guest

回答2

0

ベストアンサー

私ならこう書きます。
ポイントはHTML要素側に宛先URLとポストしたいデータを書けば、li要素がどんなに増えてもJavaScriptのコードは増やさなくて済むことです。

HTML

1<!-- 各ボタンにajax_sendというクラスを与えていることと、data-post-dataで送りたいパラメータを持たせているのがポイント --> 2<ul id="list"> 3<li id="button_1" class="ajax_send" data-host-url="http://192.168.111.111/api" data-post-data="{btn:'A',pc:1,lang:'jp'}"><img src="/img/jp/JP1.png" width="345px" alt="" id="title_1"></li> 4<li id="button_2" class="ajax_send" data-host-url="http://192.168.111.111/api" data-post-data="{btn:'B',pc:1,lang:'jp'}"><img src="/img/jp/JP2.png" width="345px" alt="" id="title_2"></li> 5<li id="button_3" class="ajax_send" data-host-url="http://192.168.111.111/api" data-post-data="{btn:'C',pc:1,lang:'jp'}"><img src="/img/jp/JP3.png" width="345px" alt="" id="title_3"></li> 6</ul>

JavaScript

1$(function() { 2 $(".ajax_send") // こうやってajax_sendを持ったクラス全てにこの処理を登録する 3 .click(function() { 4 var hostUrl = $(this).data('host-url'); // data-host-urlからURLを引き出す 5 var jsonObject = JSON.parse($(this).data('post-data')); // data-post-dataから送信したいjsonを引き出す 6 $.ajax({ 7 url:hostUrl, 8 type:'POST', 9 dataType:'json', 10 data:jsonObject 11 }); 12 }); 13});

投稿2017/11/20 09:57

編集2017/11/20 10:05
masaya_ohashi

総合スコア9206

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

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

shiro_momo

2017/11/21 02:27

回答ありがとうございます。 クラスでまとめる表記、参考にさせていただきました。
guest

0

javascript

1$( function() { 2 $('li').on('click',function() { 3 var hostUrl= 'http://192.168.111.111/api'; 4 var param1 = ""; 5 var param2 = 1; 6 var param3 = "jp"; 7 switch($(this).attr('id')){ 8 case "button_1": 9 param1 = "A"; 10 break; 11 case "button_2": 12 param1 = "B"; 13 break; 14 case "button_3": 15 param1 = "C"; 16 break; 17 } 18 var params ={"btn":param1,"pc":param2,"lang":param3}; 19 $.ajax({ 20 "url": hostUrl, 21 "type":'get', 22 "dataType": 'json', 23 "data" : params, 24 }); 25 }); 26} ); 27

投稿2017/11/20 11:37

yambejp

総合スコア114829

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

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

shiro_momo

2017/11/21 02:26

ご回答ありがとうございます。 switchで切り替えた方が、より管理しやすくなりますね! 取り入れてみたいと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問