Ajax在本地主机上成功获取请求,但在线失败

时间:2019-02-06 11:24:37

标签: json ajax wordpress rest api

我试图在Wordpress中通过ajax get请求获取数据,我用javascript写了一个脚本,然后用php写了一个脚本来处理它。

javascript的代码如下:

window.loadServices = function loadServices(){
var data = {
          action: 'get_services',
          perpage: '6',
        };
$.ajax({
 type: 'GET',
 url: sendbooking.ajaxurl,
 data: data,
 dataType: 'json',
 success: function (response) {
   post = response.data;
   console.log(response);
   $.each(post, function(){
     elem = $(this)[0];
     media = elem._links['wp:featuredmedia']
     var media_href;
     $.each(media, function(){
       media_href = $(this)[0].href;
     })
     // console.log(elem);

     var image;

     $.ajax({
       type: 'GET',
       url: media_href,
       dataType: 'JSON',
       success: function(data){
         image = data.source_url;
       },
       async: false,
     })

     $('.services .elements .elements-container').append(
      $('<div />', {
        class: 'loader',
      }).append(
        $('<img />', {
          src: '/wp-content/themes/farmhouse/assets/images/loader.gif'
        })
      )
     )

     setTimeout(function(){
       $('.loader').fadeOut();
     }, 2000);
     $('.services .elements .elements-container').append(
       $('<div />', {
         class: 'element '+elem.type,
       }).append(
           $('<a />', {
             href: elem.link
           }).append(
             $('<div />', {
               class: 'element-image',
             }).append(
               $('<img />', {
                 src: image,
               })
             )
           )
        ).append(
          $('<h5 />', {
            class: 'element-title',
          }).append(
            $('<a />', {
              href: elem.link,
              text: elem.title.rendered
            })
          )
        )
     )
     setTimeout(function(){
       $('.loader').remove();
     }, 2000);
   })
  },
 });
}

这是php的代码:

if(!function_exists('get_services')):
    function get_services(){

        $data = $_GET;
        $json_feed = get_site_url() . '/wp-json/wp/v2/service?per_page='.$data['perpage'];
       $json = file_get_contents($json_feed);
       $json_decoded = json_decode($json);

        wp_send_json_success($json_decoded);

 }

 add_action('wp_ajax_get_services', 'get_services');
 add_action('wp_ajax_nopriv_get_services', 'get_services');
endif;

我遇到的问题是在localhost上运行正常,我得到了所需的内容,没有任何问题。当我要在线部署站点时,ajax不会检索任何内容。抛出console.logs时,我注意到从api url(file_get_contents)获取数据时脚本失败,但是如果直接通过浏览器的地址栏或邮递员去那里,则数据将被正确提供。 (您可以测试:http://www.dsoftwarelab.it/ilpiastrino/wp-json/wp/v2/service?per_page=6)。

我真的不知道该怎么解决,因为我已经尝试了一切。

2 个答案:

答案 0 :(得分:1)

情况1:您没有服务器访问权限。

如果您具有root用户访问权限,请编辑php.ini,通常位于/etc/php.ini。

如果您没有root用户访问权限,请尝试添加ini_set('allow_url_fopen', 'On');ini_set('allow_url_fopen', '1');.

如果看不到php.ini,请尝试在PHP脚本中使用phpinfo()查找php.ini的位置。

情况2:您错过了。中的SSL参数。

$url= 'https://example.com';

$arrContextOptions=array(
      "ssl"=>array(
            "verify_peer"=>false,
            "verify_peer_name"=>false,
        ),
    );  

$response = file_get_contents($url, false, stream_context_create($arrContextOptions));

案例3:禁止403

服务器以“ 403 FORBIDDEN”状态代码响应。因此,file_get_contents()可以正常工作,但您尝试访问的服务器(或其间的代理或其他内容)不允许使用它。

答案 1 :(得分:0)

请勿将json转换为数组。评论这行$json_decoded = json_decode($json);

if(!function_exists('get_services')):
    function get_services(){

        $data = $_GET;
        $json_feed = get_site_url() . '/wp-json/wp/v2/service?per_page='.$data['perpage'];
        $json = file_get_contents($json_feed);  

        //dont need this line
        //$json_decoded = json_decode($json);

        wp_send_json_success($json);

    }

 add_action('wp_ajax_get_services', 'get_services');
 add_action('wp_ajax_nopriv_get_services', 'get_services');
endif;