我已设法将Wordpress
数据编码为JSON
for storelocator页面,但页面无法解析返回的JSON
。它在控制台中出现404 Not Found
错误,即使该文件存在且实际上正在返回JSON
数据。
storelocator JS(基本代码):
var settings = $.extend( {
'mapDiv': 'map',
'listDiv': 'loc-list',
'formContainerDiv': 'form-container',
'formID': 'user-location',
'inputID': 'address',
'dataType': 'json',
'dataLocation': 'http://localhost/website/wp-content/themes/custom/locations.php',
'jsonpCallback': null
}, options);
我的PHP:
<?php
global $table_prefix, $wpdb, $output_array;
require_once('../../../wp-blog-header.php');
require_once('../../../wp-admin/includes/upgrade.php');
$output_array = array();
query_posts('category_name=business&showposts=-1');
//query_posts('name='.$post_name.'&showposts=-1');
while (have_posts()) : the_post();
$name = get_the_title();
$summary = get_the_content();
$lat = get_field( "lat", $post->ID );
$lng = get_field( "lng", $post->ID );
$address = get_field( "address", $post->ID );
$phone = get_field( "phone", $post->ID );
$web = get_field( "web", $post->ID );
array_push($output_array, array("id"=>$post->ID,
"name"=>$name,
"summary"=>$summary,
"lat"=>$lat,
"lng"=>$lng,
"address"=>$address,
"phone"=>$phone,
"web"=>$web));
endwhile;
//print_r($output_array);
echo json_encode($output_array);
?>
返回的JSON示例:
[{"id":76,"name":"AFRICAN ELITE PROPERTIES","summary":"Property development and management","lat":"-33.915025","lng":"18.421118","address":"Somerset Road, Green Point","phone":"021 421 1090","web":"www.africaneliteproperties.com"}]
注意:当我将返回的数据复制到JSON文件中并将其用作数据位置时,它可以完美地工作。我已经检查了文件权限,一切都很好。
我哪里可能出错?
答案 0 :(得分:1)
这不是在wordpress中使用AJAX的正确方法,您必须使用动作挂钩将请求发送到admin-ajax.php
。看看这个例子:
$.ajax({
url: 'http://localhost/website/wp-admin/admin-ajax.php',
type: 'post',
data: {action: 'my_json_data_fetcher'},
success: function(response){}
});
现在你要做的就是调用这两个钩子wp_ajax_
和wp_ajax_nopriv_
,转到你的主题文件夹中的functions.php
。
// should be in your functions.php
// not that my_json_data_fetcher with wp_ajax_ and wp_ajax_nopriv_ hooks
add_action('wp_ajax_my_json_data_fetcher', 'now_your_function_that_return_json');
add_action('wp_ajax_nopriv_my_json_data_fetcher', 'now_your_function_that_return_json');
function now_your_function_that_return_json() {
global $table_prefix, $wpdb, $output_array;
$output_array = array();
query_posts('category_name=business&showposts=-1');
while (have_posts()) : the_post();
$name = get_the_title();
$summary = get_the_content();
$lat = get_field( "lat", $post->ID );
$lng = get_field( "lng", $post->ID );
$address = get_field( "address", $post->ID );
$phone = get_field( "phone", $post->ID );
$web = get_field( "web", $post->ID );
array_push($output_array, array("id"=>$post->ID,
"name"=>$name,
"summary"=>$summary,
"lat"=>$lat,
"lng"=>$lng,
"address"=>$address,
"phone"=>$phone,
"web"=>$web));
endwhile;
echo json_encode($output_array);
die(0);
}