西川です。
クロスドメインでajax通信するために、今まではxdomainajax.jsを使用。
が、年明けにサイトを見てみると、こんなエラーがコンソールに表示されている!
Failed to load resource: net::ERR_NAME_NOT_RESOLVED
ライブラリで使用されていたYQL(Yahoo Query Language)が2019/1/3にサービス終了してしまったようです…
(「YQLは、米Yahoo! Developer Networkが提供している、ありとあらゆるWeb上のリソースにアクセスすることができるサービス」でした。ドメインも削除されている…XMLもJSONに変換してくれるので便利だったのに…)
https://developer.yahoo.com/yql/
急ぎで対応する必要があったので、いくつか調べてみました。
クロスドメインでajax通信する方法
- xdomainajax.js
- JSONP
- phpを使用して実現
今回の問題
(1)は今回から使えなくなったので、除外。YQLの代替サイトを探す時間はない…
また、出力側のデータを修正することはできないので(2)の方法は今回は使用できませんでした。
今回は(3)で対応していきたいと思います。
参考記事は以下です。
参考
https://qiita.com/tsunet111/items/c1a4ce1499e53fce449a
用意したもの
phpでxmlをテキストデータで取得して、jsでxmlに変換してしまいます。
ajax.php
<?php
if(isset($_GET["url"]) && preg_match("/^https?:/",$_GET["url"])){
echo file_get_contents($_GET["url"]);
}else{
echo "error";
}
function.js
var xurl = encodeURIComponent('取得したいxmlのurl');
$.ajax({
url: "ajax.php?url="+xurl,
dataType: 'text',
type: "GET",
success: function(res) {
var xmlText = res,
xmlDoc = $.parseXML(xmlText);
console.log(res);
}
})
まとめ
サーバーサイドプログラムはあまり得意じゃないので、いつもjsでなんとかしようとしてましたが、
ちょっと調べてみれば、jsで書くよりも簡単にできました。
今年はphpやpythonを勉強していきたいです。