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

Json Ajax获取请求在本地主机上成功,但联机失败,json,ajax,wordpress,rest,api,Json,Ajax,Wordpress,Rest,Api,我试图通过Wordpress中的AJAXGET请求获取数据,我用javascript编写了一个脚本,用php编写了另一个脚本来处理它 javascript的代码如下所示: window.loadServices = function loadServices(){ var data = { action: 'get_services', perpage: '6', }; $.ajax({ type: 'GET', url: sendbo

我试图通过Wordpress中的AJAXGET请求获取数据,我用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);
   })
  },
 });
}
我遇到的问题是,在localhost上,这一切都很好,我得到了我需要的内容,没有任何问题。当我要在线部署站点时,ajax不会检索任何内容。通过抛出console.logs,我注意到脚本在从api url文件获取数据时失败,但如果您直接通过浏览器的地址栏或邮递员访问,数据将正确送达。您可以测试:

我真的不知道怎么解决它,因为我真的什么都试过了

案例1:您在服务器上没有访问权限

如果您有根访问权限,请编辑php.ini,通常位于/etc/php.ini

如果您没有根访问权限,请尝试添加ini_set'allow_url_fopen'、'On';或ini设置“允许url打开”、“1”

如果看不到php.ini,请尝试在php脚本中使用phpinfo来查找php.ini位置

案例2:中缺少SSL参数

案例3:403禁止


服务器以403禁止状态代码响应。因此,文件内容可以正常工作,但您试图访问的服务器或代理或介于两者之间的其他东西不允许使用它。

不要将json转换为数组。注释这一行$json_decoded=json_decode$json


试图设置这些值,但它不在本地注册它所做的任何事情。没有启用ssl。服务器在执行该操作时给出状态200。@LuigiBriganti是您的文件内容响应吗?将数据转储到文件中。考古学家。@Coder你是什么意思?@VasimShaikh本地主机中的内容响应是一个包含我的数据的数组,但联机结果是错误的,就像服务器无法从提供的url读取任何数据一样。这是我不明白的。如果我不在php中解码json,那么我必须在javascript中使用json.parse进行解码,结果是一样的,因为我从wp_send_json_success获得的只是一个包含我的json的字符串,与我提供的js scritp没有任何关系。你检查过吗?你应该使用jsonparse
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;
$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));
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;