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

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

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

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

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

HTML

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

Q&A

解決済

3回答

609閲覧

クロスドメイン(jquery.xdomainajax.js)を使用した機能が突然動かなくなりました。

退会済みユーザー

退会済みユーザー

総合スコア0

JavaScript

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

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

HTML

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

0グッド

0クリップ

投稿2017/09/19 12:36

###前提・実現したいこと
クロスドメイン(jquery.xdomainajax.js)を使用した機能が突然動かなくなりました。

###発生している問題・エラーメッセージ

クロスドメイン(jquery.xdomainajax.js)を使用した機能でエラーになってしまいました。 今まで、正常に外部サイトから情報を取得していたのですが、突然動かなくなってしまいました。 エラー内容は以下の通りです。 XMLHttpRequest : 200 textStatus : parsererror errorThrown : jQuery3110247705122841547_1505822564193 was not called 使用しているjsは jquery-3.1.1.min.jsとjquery.xdomainajax.jsです。 Yahoo!のYQLというサービス終了に伴うエラーは解決しており、その後ずっと機能していました。 スマホのsafariではエラーにならず、機能していますが、パソコンのchromeとIE、firefoxでは機能しません。 よろしくお願いします。

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

$(function kawase1() { $.ajax({ url: "http://keisanki.me/widget/type01/TRY/100", type: 'GET', success: function(data) { var nm = $(data.responseText).text().replace(/&gt;/g, '>').replace(/&lt;/g, '<'); var dpObj = new DOMParser(); var xmlDoc = dpObj.parseFromString(nm, "text/xml"); $('#container1').html("= "); $('#container2').html($(xmlDoc).find('.result')); $('#container3').html(""); }, error: function(XMLHttpRequest, textStatus, errorThrown) { $("#container1").html("XMLHttpRequest : " + XMLHttpRequest.status); $("#container2").html(" textStatus : " + textStatus); $("#container3").html(" errorThrown : " + errorThrown.message); } }); }); jquery.xdomainajax.jsの中身はYahoo!のYQLというサービス終了対応しており以下です。 jquery-3.1.1.min.jsは改変してません。 jQuery.ajax = (function(_ajax){ var protocol = location.protocol, hostname = location.hostname, exRegex = RegExp(protocol + '//' + hostname), YQL = 'http' + (/^https/.test(protocol)?'s':'') + '://query.yahooapis.com/v1/public/yql?callback=?', query = 'select * from htmlstring where url="{URL}" and xpath="*"'; function isExternal(url) { return !exRegex.test(url) && /:///.test(url); } return function(o) { var url = o.url; if ( /get/i.test(o.type) && !/json/i.test(o.dataType) && isExternal(url) ) { // Manipulate options so that JSONP-x request is made to YQL o.url = YQL; o.dataType = 'json'; o.data = { q: query.replace( '{URL}', url + (o.data ? (/?/.test(url) ? '&' : '?') + jQuery.param(o.data) : '') ), diagnostics: true, env: 'store://datatables.org/alltableswithkeys', format: 'xml' }; // Since it's a JSONP request // complete === success if (!o.success && o.complete) { o.success = o.complete; delete o.complete; } o.success = (function(_success){ return function(data) { if (_success) { // Fake XHR callback. _success.call(this, { responseText: (data.results[0] || '') // YQL screws with <script>s // Get rid of them .replace(/<script[^>]+?/>|<script(.|\s)*?/script>/gi, '') }, 'success'); } }; })(o.success); } return _ajax.apply(this, arguments); }; })(jQuery.ajax);

###試したこと
ajaxの設定でtype: 'GET',の下にdataType 'html',やdataType 'text',、dataType 'json',と色々追加記述を変更してみましたが、ダメでした。

###補足情報(言語/FW/ツール等のバージョンなど)
jquery

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

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

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

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

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

guest

回答3

0

私も同じように動かなくなったので調べました。
jquery.xdomainajax.jsの中でYQLを使用しているようなのですが、
YQLの仕様が変わっているということでソースコードを多少いじる必要がありました。

このやり方で直したか忘れましたが、以下のサイトに対処法があります。
http://sidewalkcafe.hatenablog.com/entry/2017/06/29/211719

jquery.xdomainajax.jsの中身を以下のように変える

//古いデータ 18行目くらい
YQL = 'http' + (/^https/.test(protocol)?'s':'') + '://query.yahooapis.com/v1/public/yql?callback=?',
query = 'select * from html where url="{URL}" and xpath=""';
//新しいデータ 18行目くらい
YQL = 'http' + (/^https/.test(protocol)?'s':'') + '://query.yahooapis.com/v1/public/yql?callback=?&env=store%3A%2F%2Fdatatables.org%2Falltableswithkeys',
query = 'select * from htmlstring where url="{URL}" and xpath="
"';

投稿2017/10/02 00:09

igaiga

総合スコア144

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

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

退会済みユーザー

退会済みユーザー

2017/10/02 02:06

解答ありがとうございます。 とても助かると共に、同じようにjquery.xdomainajax.jsを使用されている方がいて励みになります。 ソースの差分があった、 YQL = 'http' + (/^https/.test(protocol)?'s':'') + '://query.yahooapis.com/v1/public/yql?callback=?', を YQL = 'http' + (/^https/.test(protocol)?'s':'') + '://query.yahooapis.com/v1/public/yql?callback=?&env=store%3A%2F%2Fdatatables.org%2Falltableswithkeys', に変更してみましたが、エラー内容は変わらず取得できませんでした。 エラー内容 XMLHttpRequest : 200 textStatus : parsererror errorThrown : jQuery311007846648995923688_1506908985065 was not called YQLの仕様が変わった時、igaigaさんの教えて頂いたサイトなど見てソースを変更した時はちゃんと動いてました。 YQ対応をして1ヶ月くらいした時に急に動かなくなってしまって困り果ててしまった状態です。 その1ヶ月の間にjquery.xdomainajax.jsやJquery(jquery-3.1.1.min.js)、クロスドメインを利用する関数(外部サイトから為替レートを取得する関数)をいじった事はありません。 YQLの仕様が変わった時、上記のソース差分は、どちらでも動いていた記憶があります。 パソコン上で外部サイトから為替レートを取得する関数がエラーをだしてしまっている時、 スマホ上ではエラーになっていなかったのですが、キャッシュが更新されてしまったのか、スマホ上でもエラーになってしまいました。 これらの状況から、気付かずソースを改悪した可能性が高いと疑いソースを再度見直してみましたが、 原因は分からないままでした。
igaiga

2017/10/02 02:27

失礼いたしました。対処済だったんですね^^; 私の場合、実装しようとしたサーバが特殊で外部URLがすべて書き換えられてしまうため、本番環境では実装できなかったので現在は使用していません。
退会済みユーザー

退会済みユーザー

2017/10/02 14:26

YQL対策に不備があった可能性もあるので、やり方を教えて頂き感謝しています。
guest

0

ベストアンサー

なぜか放置していたら、突然動くようになりました。
動くようになった原因は不明です。ソースも動かくなった時のままです。

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

投稿2017/10/09 16:27

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

0

URL

1https://keisanki.me/widget/type01/TRY/100

httpをhttpsに変えてみるとどうなりますか?

投稿2017/09/19 13:49

mtdsnsk

総合スコア789

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

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

退会済みユーザー

退会済みユーザー

2017/09/19 14:02

解答ありがとうございます。 httpsに変更してみましたが、エラー内容は変わりませんでした。 以下のページの為替の部分がエラーになっております。 http://trippi.webcrow.jp/ エラーのjsはhttp://trippi.webcrow.jp/js/top.jsです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問