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

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

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

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

4回答

2347閲覧

<script> $.ajax({・・・を別ファイルに書き出す方法は?

hizirida

総合スコア36

Ajax

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2017/01/16 02:21

編集2017/01/16 02:38

某サイトにあるfeedを書き出すスクリプトをシンプルにしようと、

スクリプトだけ別ファイルに書き出してみたのですが、

思うように動いてくれません。

<script src='//ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js'></script> <script> $.ajax({ url: 'http://example.com/feed', type: 'get', dataType: 'xml', timeout: 5000, success: function(xml, status) { if (status === 'success') { var row = 0; var data = []; var nodeName; $(xml).find('item').each(function() { data[row] = {}; $(this).children().each(function() { // 子要素を取得 nodeName = $(this)[0].nodeName; // 要素名 data[row][nodeName] = {}; // 初期化 attributes = $(this)[0].attributes; // 属性を取得 for (var i in attributes) { data[row][nodeName][attributes[i].name] = attributes[i].value; // 属性名 = 値 } data[row][nodeName]['text'] = $(this).text(); }); row++; }); $('#rss').wrapInner('<ul></ul>'); for (i in data) { $('#rss').find('ul').append('<li><a href="' + data[i].link.text + '">' + data[i].title.text + '</a></li>'); } } } });

上記は直接HTMLに記述すると問題なく表示されますが、

下記のように別ファイルに書き出すと動かなくなります。

<script src='//ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js'></script> <script src="components/rss.js"></script>

「components/rss.js」の記述はこうです。

$.ajax({ url: 'http://example.com/feed', type: 'get', dataType: 'xml', timeout: 5000, success: function(xml, status) { if (status === 'success') { var row = 0; var data = []; var nodeName; $(xml).find('item').each(function() { data[row] = {}; $(this).children().each(function() { // 子要素を取得 nodeName = $(this)[0].nodeName; // 要素名 data[row][nodeName] = {}; // 初期化 attributes = $(this)[0].attributes; // 属性を取得 for (var i in attributes) { data[row][nodeName][attributes[i].name] = attributes[i].value; // 属性名 = 値 } data[row][nodeName]['text'] = $(this).text(); }); row++; }); $('#rss').wrapInner('<ul></ul>'); for (i in data) { $('#rss').find('ul').append('<li><a href="' + data[i].link.text + '">' + data[i].title.text + '</a></li>'); } } } });

不具合の対処法を教えてください。

あとですね、

上記方法ではfeedのtextは書き出してくれますが、

ブログ記事内の画像を抽出することは可能でしょうか?

可能であれば記述法を教えてください。

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

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

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

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

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

guest

回答4

0

外部ファイル最後の</script>はいらないのでは?

投稿2017/01/16 02:22

yambejp

総合スコア114767

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

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

hizirida

2017/01/16 02:31 編集

質問の記述を間違えていました。 実際には</script>は書いていません。 修正します。
yambejp

2017/01/16 03:32

とりあえず、エラーがでてないか開発ツールでチェックしてみてください
hizirida

2017/01/18 02:04

開発ツールでチェックしましたが、エラーはないようです。
yambejp

2017/01/18 02:19

success: function内にconsole.logでデバッグ用の文字をかくとか (console.log("ok!")) error: function(XMLHttpRequest, textStatus, errorThrown) { console.log( textStatus); } でajaxでの受取失敗状況を確認したほうがいいですね ご提示いただいた内容ではjqueryの読み込みが複数しているようには 見えませんが、もしそれで納得したならそれはそれで構いません
hizirida

2017/01/18 07:49 編集

この件以外に、1ページ内に下記のものも利用しています。 <script src="js/sidr/jquery.js"></script> <script src="js/sidr/jquery.sidr.min.js"></script> <script src="js/wrap.js"></script> <script defer src="js/FlexSlider2/jquery.flexslider-min.js"></script> どこかにバッティングしていませんかんね。
masaya_ohashi

2017/01/18 07:50

1行目でjquery.jsって読み込んでるじゃないですか。おそらくsidrというパッケージにデフォルトでついてくるjqueryだと思います。googleapisから読み込んでいるjquery.min.jsもjQueryなので2回jQueryを読み込んでいることになります。これなら一番上にgoogleapisのjquery.min.jsを持ってきて、sidr/jquery.jsを消すべきです。
guest

0

自己解決

色々と検証しましたが、その他のjqueryと、

下記とがバッティングしているように思えます。

<script src='//ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js'></script>

よって、この件は諦めることにします。

ご回答ありがとうございました。

投稿2017/01/18 02:10

hizirida

総合スコア36

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

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

0

コードの先頭にconsole.log("test")などを記述して、本当にその外部ファイルが読み込まれているか確認してみてください。コンソールにエラーが出ていなくても、通信ログのほうにエラーが出ていないですか?

投稿2017/01/18 02:10

masaya_ohashi

総合スコア9206

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

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

hizirida

2017/01/18 02:11

ご回答ありがとうございます。
guest

0

とりあえずフルパスにしてみるとか。

HTML

1<script src="http://example.com/components/rss.js"></script>

あとはドキュメントの用意を待ってみるとか。

JavaScript

1$( function() { 2 $.ajax({ /* 略 */ }); 3} );

ひとまずデベロッパーツールでエラーを確認してそれを質問文に追記してください。

【開発者ツールを使おう! カスタマイズするphpファイルを探す-その1 | RYUS blog】
http://ryus.co.jp/blog/customize-php-search-1/

【Chrome デベロッパーツールの使い方概要 | Web Tips】
http://weback.net/utility/1410/

【Web関係者は知っておくべきGoogleChromeデベロッパーツールの使い方 | Ocadweb】
http://ocadweb.com/web/googlechromedevelopertools

投稿2017/01/16 02:39

kei344

総合スコア69398

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

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

hizirida

2017/01/18 02:05

提案していただいたところを検証しましたが、やはり動いてくれません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問