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

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

ただいまの
回答率

90.50%

  • JavaScript

    16447questions

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

  • HTML

    8991questions

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

  • jQuery

    6716questions

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

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

解決済

回答 3

投稿

  • 評価
  • クリップ 0
  • VIEW 2,779

Davidy

score 2

前提・実現したいこと

クロスドメイン(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

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 3

+1

私も同じように動かなくなったので調べました。
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 11: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の仕様が変わった時、上記のソース差分は、どちらでも動いていた記憶があります。

    パソコン上で外部サイトから為替レートを取得する関数がエラーをだしてしまっている時、
    スマホ上ではエラーになっていなかったのですが、キャッシュが更新されてしまったのか、スマホ上でもエラーになってしまいました。
    これらの状況から、気付かずソースを改悪した可能性が高いと疑いソースを再度見直してみましたが、
    原因は分からないままでした。

    キャンセル

  • 2017/10/02 11:27

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

    キャンセル

  • 2017/10/02 23:26

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

    キャンセル

check解決した方法

0

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

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

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

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/09/19 23:02

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

    キャンセル

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

  • ただいまの回答率 90.50%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • JavaScript

    16447questions

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

  • HTML

    8991questions

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

  • jQuery

    6716questions

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