我试图在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)。
我真的不知道该怎么解决,因为我已经尝试了一切。
答案 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;