サポート » プラグイン » 「admin-ajax.php」でエラーが発生します。

  • winbridge

    (@winbridge)


    Ajax通信によりファイルをダウンロードできるようプラグインのカスタマイズを行いました。

    実行してみると「the server responded with a status of 500()」と表示されてしまいます。(画像挿入できないため、詳細は各リンク先を参照して下さい)

    https://drive.google.com/file/d/1UeMUaZYthF9mBosR8qZXjGAz4Wf13NFR/view?usp=share_link

    https://drive.google.com/file/d/1MSUa5Bp-B9ltK_3qgXRtp-h00Sk3kEsp/view?usp=share_link

    // POSTメソッドで送信するデータ
    var params = {
    	action: 'reservations_get',
    	type: type,
    	calendar_id: $('#calendar-ID').val(),
    	start_date: $('#reservations-start-date').val(),
    	end_date: $('#reservations-end-date').val(),
    	start_hour: $('#reservations-start-hour').val(),
    	end_hour: $('#reservations-end-hour').val(),
    	status_pending: $('#reservations-pending').is(':checked') ? true : false,
    	status_approved: $('#reservations-approved').is(':checked') ? true : false,
    	status_rejected: $('#reservations-rejected').is(':checked') ? true : false,
    	status_canceled: $('#reservations-canceled').is(':checked') ? true : false,
    	status_expired: $('#reservations-expired').is(':checked') ? true : false,
    	payment_methods: paymentMethods.join(','),
    	search: $('#reservations-search').val(),
    	search_by: $('#reservations-search-by').val(),
    	page: $('#reservations-page').val(),
    	per_page: $('#reservations-per-page').val(),
    	order: $('#reservations-order').val(),
    	order_by: $('#reservations-order-by').val()
    };
    
    // Excelではない場合
    if (0 !== type.indexOf('excel')) {
    	this.ajaxRequestInProgress = $.post(ajaxurl, params, function (data) {
            data = $.trim(data);
            BackEndReservations.download(type, data);
            BackEnd.toggleMessages('none', '');        
    	});
    // Excelの場合はAJAX通信(POSTメソッド)を行う
    } else {
    // JavaScriptがサーバーにHTTPリクエストを送るために、XMLHttpRequestオブジェクトのインスタンスを作成
    	var xhr = new XMLHttpRequest();
    // openメソッドでリクエストの初期化
    	xhr.open('POST', ajaxurl, true);
    // ContentTypeヘッダとしてapplication/x-www-form-urlencoded;charset=UTF-8を指定する(サーバに対して解析方法の指定)
    	xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
    // sendメソッドの引数にリクエスト内容を指定(←ここでエラー発生)
    	xhr.send($.param(params));
    // blob型(Binary Large OBject:データベースシステムで用いられるデータ型のひとつ)でバイナリーデータを受信
    	xhr.responseType = 'blob';
    	xhr.onload = function (oEvent) {
    // ダウンロード完了後の処理を定義する
            var blob = xhr.response;
    // WordPress自体かPluginの最初の方の処理で先頭に余計な改行コードが出力している(Excelとして読み込めなくなる)。
    // 影響を最小で抑えるために、妥協策ではあるが、JS上でその改行コードを削除する。
    // Blob.slice():一部のデータを切り取る
            blob = blob.slice(5);//5番目
            var filename = 'reservations.xlsx'
    // Blobオブジェクトをファイルに保存する(IE/EdgeではmsSaveBlobメソッド)
            if (window.navigator.msSaveBlob) {
    	    window.navigator.msSaveBlob(blob, filename);
    // それ以外のブラウザ                
            } else {
    // Blobオブジェクトを指すURLオブジェクトを作る
    // 「Firefox:window.URL.createObjectURL()」と「chrome:window.webkitURL.createObjectURL()」の両方に対応
    	        var downloadUrl = (window.URL || window.webkitURL).createObjectURL(blob);
    // リンク(<a>要素)を生成し、JavaScriptからクリックする
    	        var link = document.createElement('a');
    	        document.body.appendChild(link); // Firefox対策(DOMに実際に追加しないとclickイベントが発火しない)
    	        link.setAttribute('type', 'hidden');
    	        link.href = downloadUrl;
    	        link.download = filename;
    	        link.click();
    // オブジェクトURLを使い終わったらファイルへの参照をこれ以上保持しないようにブラウザーに知らせる
    // ※revokeObjectURL()は、引数で与えられた文字列(オブジェクトURL)と一致するものを検索して、Blob URLストア内から削除します。
    	        (window.URL || window.webkitURL).revokeObjectURL(downloadUrl);
            }
            BackEnd.toggleMessages('none', ''); // DL中のローディングを消す
    	};
    }

    上記が作成したコードですが、ファイル「admin-ajax.php」へのアクセスがブロックされてしまわないようにするにはどうすればよろしいでしょうか。

    皆さんのアドバイスをお待ちしております。

5件の返信を表示中 - 1 - 5件目 (全5件中)
  • kimipooh

    (@kimipooh)

    WordPressを置いているサーバーで、admin-ajax.php に対するアクセスを許可する必要があると思います。このファイルは wp-admin/admin-ajax.php にあり、 wp-admin についてへレンタルサーバー等によってたとえば海外からのアクセスをブロックしているなどの場合もあります。

    その制限をお使いのサーバーで admin-ajax.php のみ除外できるか次第かなと思います。

    下記はApacheサーバーが使われていて、 .htaccess ファイルによる制御が可能な場合にできる対処方法です。できるかどうかは利用しているサーバーの管理運営元に問い合わせてみてください。
    https://kimiyakitani.wordpress.com/2014/02/13/how-to-resolve-admin-ajax-error/

    トピック投稿者 winbridge

    (@winbridge)

    kimipooh様、先日はアドバイスありがとうございます。

    下記、今回の事象とたしかに似ていますね。

    レンタルサーバにお問い合わせメールを送りましたので回答を待ってみようと思います。

    私が影響を受けたのは、「The Event Calendar PRO」(有償版)のMini Calendar(ウィジェット)でした。
    上記エラーが出た場合、IPアドレス制限下では、翌月や前月ボタンを押すとAjaxがバグって(admin-ajax.phpにアクセスできなくて)カレンダーが動かなくなります(ブラウザの再読込が必要)。

    munyagu

    (@munyagu)

    こんにちは

    サーバー側に出力されているエラーログを確認してみて下さい。

    トピック投稿者 winbridge

    (@winbridge)

    kimipooh様:

    レンタルサーバ会社に問い合わせところ国外IPアドレスフィルタが有効になっていたとのことで無効(制限しない)にしたのですが、結局変わらずです・・・。また、ディレクトリ「./wp-admin/admin-ajax.php」と同じ場所に「.htaccess」を置いて制限解除を試みたのですが、これも効果はありませんでした。

    munyagu様:

    はじめまして。エラーログに遮断しているIPアドレスが残っているということでしょうか。

    kimipooh

    (@kimipooh)

    そこは、.htaccess でIPアドレス許可の設定をした場合(具体的にどういう設定をしたのかを提示して説明するとよいでしょう)、国外IPアドレスフィルタは無効化できるのかを聞いてみるということになるでしょう。

    最終的にはその国外IPアドレスフィルタを無効にして、 .htaccess 側でセキュリティ対策できるかどうかになるかなと思います。そのかわり、wp-login.php, wp-admin などへのIPアドレス制限などは自前でやる必要が出てきますけどね。

5件の返信を表示中 - 1 - 5件目 (全5件中)
  • トピック「「admin-ajax.php」でエラーが発生します。」には新たに返信することはできません。