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

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

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

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

Q&A

1回答

1813閲覧

【js】jquery.xdomainajax.jsがいきなりエラーを吐くようになった

gogoackman3

総合スコア109

JavaScript

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

0グッド

0クリップ

投稿2017/09/26 06:34

編集2017/09/26 11:25

今まで問題なく動いていたjquery.xdomainajax.jsが動かなくなりました。

該当コードは以下の通りです。

javascript

1$(document).on('click','.get-link-title-btn',function(){ 2 3 // urlを取得 4 var url = $('#url').val(); 5 6 // タイトルを取得 7 $.ajax({ 8 url: url, 9 type: 'GET', 10 dataType: 'html', 11 cache : false, 12 success: function(data) { 13 var row = data.responseText; 14 $.when( 15 xml = $.parseXML(row) 16 ).done(function(xml){ 17 var result = $(xml).find("result").text(); 18 // var title = $(result).find('title'); 19 var title = result.substring(result.indexOf("<title>")+7,result.indexOf("</title>")); 20 // フォームに追加 21 if(title == "") { 22 alert("タイトルの取得に失敗しました。何度か試しても失敗する場合は手入力でお願いします。"); 23 } 24 else { 25 // タイトルテキストをタイトルフォームに挿入 26 $('#link-title').val(title); 27 // 文字数もカウントしてカウンターに挿入&文字数チェック 28 var l = title.length; 29 var counter = $('#link-title_counter'); 30 counter.text(l + ' / 100 文字'); 31 counter.css('color', ( l > 100 ? '#F3868B' : 'gray' )); 32 } 33 }); 34 }, 35 error: function(e) { 36 console.log(e); 37 alert("タイトルの取得に失敗しました。何度か試しても失敗する場合は手入力でお願いします。"); 38 } 39 });

そもそもget送信した後のレスポンスが"success"ではなく"error"になっているようで、コードの問題ではないような気がしています。

console.log(e)でエラーが返ってきた内容を表示すると以下の通りです。
※どのURLでスクレイピングしてもerrorになります。

イメージ説明

successで何かしらスクレイピング先のページのxmlが返ってくればまだ調査の仕様があるのですが・・・。

同じような状況の方はいらっしゃいますでしょうか?
また、もしコードを見て問題あるとわかった方は教えていただけると幸いです・・・。。。

【追記】
ajax通信前
※この時点でName欄にnewがあるのはスクレイピングボタンを表示する為に遷移している為。
イメージ説明

ajax通信後
イメージ説明

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

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

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

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

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

guest

回答1

0

error: function(e) {
↓↓↓
error: function(xhr,err) {
console.log(err);

としてみてください
contentTypeが"html"ならパースエラーということはないとは思うのですが
contentTypeを"text"にしてデバッグする必要があるかもしれません

投稿2017/09/26 06:49

yambejp

総合スコア114784

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

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

gogoackman3

2017/09/26 07:05

ありがとうございます。さっそく試したところ、”parsererror”というテキストがconsolelogで表示されています。 これは意図した回答になりますでしょうか??
yambejp

2017/09/26 07:11

なるほどparsererrorとなると、データは正常にもどってきたけど 想定した型とは違うのでエラーになっている状況です。 前述しましたが、$.ajax内のcontentTypeを一度"text"にしてみてください とりあえずsuccessの方にデータが流れると思うので 戻り値をみて次の対策を考えて下さい
gogoackman3

2017/09/26 07:21

ありがとうございます。 $.ajax({ url: url, type: 'GET', dataType: 'html', cache : false, の部分を $.ajax({ url: url, type: 'GET', dataType: 'text', cache : false, このようにdataType:''textに変更しましたが、errorの方にデータが流れパースエラーのままです・・・。 他に何か原因がありますでしょうか??お手数かけてすみません。。。
yambejp

2017/09/26 07:33

ちなみにブラウザはなにをご利用でしょうか? firefoxなら開発ツールからnetworkで参照先のurlをドリルダウンすれば 応答の生データで戻り値を確認できます chromeなら同様にNetworkでurlを選べばResposeを見られると思います
gogoackman3

2017/09/26 07:41 編集

chromeを使っています。ただ、スクレイピングを開始するボタンを押してもNetworkのName欄にnewが表示されず、何も見られないような気がします・・。 それ以外のgetやpostはName欄にnewが表示され、そこからResponseが確認出来るようです。。。
yambejp

2017/09/26 07:48 編集

それはおかしいですね、error:function(xhr,data)でxhrを受け取っているのですから 必ず、XHRが返ってきているはずです。 検索条件をAllからXHRに変えても見当たりませんか? もしurlが見つからなくても最低でも404がstatusで返ってくるはずです
gogoackman3

2017/09/26 11:26

本文に追記としてajax通信前と通信後のコンソールの画像キャプチャを記載しました。 確かにレスポンスがあるはずですよね・・・見ているところが違うのでしょうか??
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問