

WordPressからAJAXでドメインが異なるphpからデータを取得（JSON形式）したいと考えております。  
ブラウザにhtt形式でhttps://〇〇〇.jp/test.php?des=50とうつと、JSONデータが表示されます。  
このdes=50をGET形式ではなく、ブラウザからユーザーが入力した値をPOST形式で送りたいです。  
function.phpに以下のコードを書いているのですが、successのあとにfalseというよくわからない内容が戻ってきます。

以下は、function.phpに記述している内容です。

[code]

    function ajax_scripts() {
      $handle = 'tour_main';
      $file   = get_template_directory_uri() . '/js/' . $handle . '.js';
      wp_register_script( $handle, $file, array( 'jquery' ) );
    
      $action = 'tourajax-action';
    
      wp_localize_script( $handle, 'TOURAJAX_AJAX', [
          'api'    => admin_url( 'admin-ajax.php' ),
          'action' => $action,
          'nonce'  => wp_create_nonce( $action )
      ]);
      wp_enqueue_script( $handle );
    }
    add_action( 'wp_enqueue_scripts', 'ajax_scripts' );
    
    
    function ajax_tourajax_call () {
      $action = 'tourajax-action';
      $data   = '';
    
      if( check_ajax_referer( $action, 'nonce', false ) ) {
            $data = @file_get_contents("https://〇〇〇.jp/test.php?des=50");
            if ( is_wp_error( $data ) ) {
                echo $data->get_error_message();
                exit;
            }
            else {
                wp_send_json( $data );
            }
    
      } else {
        status_header( '403' );
        $data = 'Forbidden';
      }
      header( 'Content-Type: application/json; charset=UTF-8' );
      echo wp_send_json( $data );
    
      //die();これは必要？？
    }
    add_action( 'wp_ajax_tourajax-action',        'ajax_tourajax_call' );
    add_action( 'wp_ajax_nopriv_tourajax-action', 'ajax_tourajax_call' );
    
[/code]

以下は、jsに書いている内容です。

[code]

    jQuery("#testbutton").click( function(){
            var JSONdata = {
                action: TOURAJAX_AJAX.action,
                nonce: TOURAJAX_AJAX.nonce,
                des: jQuery("#des").val()
            };
    
        alert(JSON.stringify(JSONdata));
    
        jQuery.ajax({
            url : TOURAJAX_AJAX.api,
            type: "POST",
            dataType : 'json',
            data : JSONdata,
            scriptCharset: 'utf-8',
            success : function(data) {
    
                // Success
                alert("success");
                alert(data);
                jQuery("#response").html(JSON.stringify(data));
            },
            error : function(data) {
    
                // Error
                alert("error");
                alert(JSON.stringify(data));
                jQuery("#response").html(JSON.stringify(data));
            }
        });
    })
    
[/code]

どなたか教えてください。


CC BY-SA 4.0
2019-07-28T05:15:06.663
56960
2020-06-25T15:00:50.127
35283
question
php wordpress ajax
WordPressのAJAXで別ドメインのphpからjsonデータ取得


`file_get_contents`はエラー時にfalseをかえします。当然ながら`WP_Error`ではないので`is_wp_error`は無駄です。(また、ここでかえってきたfalseがレスポンスになっているとおもわれます。)

`file_get_contents`でHTTPリクエストを行うのは色々と不便な点もあります。WP内で外部にリクエストをするために[`wp_remote_request()`](https://developer.wordpress.org/reference/functions/wp_remote_request/),[`wp_remote_post()`](https://developer.wordpress.org/reference/functions/wp_remote_post/)等が用意されているのでこれを使うことをおすすめします。引数については[`WP_Http::request()`](https://developer.wordpress.org/reference/classes/WP_Http/request/)を参照ください。


CC BY-SA 4.0
2019-07-28T18:00:09.857
56991
2019-07-28T18:00:09.857
2376
56960
answer


`wp_send_json();` は

> JSONとしてエンコード、プリントしてdie

らしいので、この時点でレスポンスボディが送出されてしまいます。  
ですので、`header( 'Content-Type: application/json; charset=UTF-8'
);`はもっと早い段階で実行する必要がありますし、`echo wp_send_json( $data );`は不要です。

参考）<https://wpdocs.osdn.jp/%E9%96%A2%E6%95%B0%E3%83%AA%E3%83%95%E3%82%A1%E3%83%AC%E3%83%B3%E3%82%B9/wp_send_json>


CC BY-SA 4.0
2019-09-13T05:58:07.580
59034
2019-09-13T05:58:07.580
15377
56960
answer