前提・実現したいこと
<目的>
htmlファイルからjavascriptを呼び出し、javascriptからajaxでCGI(言語はperl)を実行させ、CGI出力値をhtmlに反映させたい。
<方法>
①htmlからjavascriptを呼び出す。
②javascriptでjQueryのライブラリを使用してajax通信を行う。
③ajaxの通信先URLにはCGIファイルを指定する。
④CGIファイルはハードコーディングされた適当なJSON形式の文字列を出力するようにする。
⑤javascriptはCGIによって出力された値をhtmlファイルに反映させる。
<結果>
ajax通信がfailしてしまった。
該当のソースコード
html
1<!DOCTYPE html> 2<html lang="ja"> 3<head> 4 <meta charset="Shift_JIS"> 5 <title>同期通信テスト</title> 6 <script src="https://code.jquery.com/jquery-3.5.1.min.js"></script> 7 <script src="script1.js"></script> 8</head> 9<body> 10 <h1>同期通信テスト</h1> 11 <form> 12 <!--ボタンがクリックされたらjavascriptを実行--> 13 <input type="button" value="データ読み込み" onClick="script1()"> 14 </form> 15 <!--CGI出力を以下に反映させたい--> 16 <h2>ID:<span id="id"></span></h2> 17 <h2>川の名前:<span id="name"></span></h2> 18 <h2>水位:<span id="suii"></span></h2> 19 20</body> 21</html>
javascript
1function script1(){ 2 $.ajax({ 3 url: 'perl1.cgi', 4 type: 'GET', 5 dataType: 'json' 6 }).done(function(data){ 7 /* 通信成功時 */ 8 alert('通信成功!'); 9 target = document.getElementById("id"); 10 target.innerHTML =data.id; 11 target = document.getElementById("name"); 12 target.innerHTML =data.name; 13 target = document.getElementById("suii"); 14 target.innerHTML =data.suii; 15 }).fail(function(data){ 16 /* 通信失敗時 */ 17 alert('通信失敗!'); 18 }); 19}
perl
1#!/usr/bin/perl 2use JSON::JSON; 3use utf8; 4use CGI; 5 6print "Content-type:application/json; charset=utf-8\n\n"; 7print "{ id : 2001, name : shinano-river, suii : 3.02 }"
試したこと
ajaxの通信先URLをjson形式のファイルにした場合は問題なく
jsonの値をhtmlに反映させることができました。
補足情報(FW/ツールのバージョンなど)
関係あるかわかりませんがさくらサーバーを使用しています。
3つソースファイルは同じディレクトリにあります。
回答3件
あなたの回答
tips
プレビュー