此函数位于functions.php中,但仅从AJAX回调中返回0。我无法弄清楚我需要做些什么来使其正常工作。
function CaseStudiesAjaxFunction() {
global $post;
$verticle = $_GET["verticle"];
$product = $_GET["product"];
$source = $_GET["source"];
$args = array(
'posts_per_page' => '12',
'tag' => array( $verticle, $product, $source)
);
$query = new WP_Query($args);
$matching_posts = array();
if ($query->have_posts()) : while ($query->have_posts()) : $query->the_post();
the_post_thumbnail();
the_title();
endwhile;
endif;
wp_reset_query();
die();
}
这是Jquery AJAX
function filterCaseStudies() {
var data = ($('#case-studies-form').serialize());
alert(data);
var request = $.ajax({
type: 'GET',
url: case_studies_ajax_script.ajaxurl,
dataType: 'text',
data: data + "&action=CaseStudiesAjaxFunction"
});
request.done(function( data ){
$('.case-studies-container').html( data );
console.log("Request success: " + data);
});
request.fail(function( jqXHR, textStatus ) {
alert( "Request failed: " + textStatus );
});
数据似乎正在从表单中正确传递,因为我可以回显变量并且AJAX回调看到它们。
答案 0 :(得分:1)
您看到来自'0'
的{{1}}响应可能是因为您尚未为此功能注册AJAX操作挂钩。
要正确注册AJAX调用函数,您需要使用操作挂钩wp_ajax_*
来管理管理员可用的功能,并wp_ajax_nopriv_*
使其在前端可用。
在JavaScript中,未正确设置AJAX调用 - 在jQuery 1.8中不推荐使用admin-ajax.php
和done()
。您应该使用"完成","成功"和"错误"而是回调。
使用success()
是在WordPress中处理AJAX请求的推荐方法。由于这是一项唯一请求,因此没有理由致电POST
。
根据个人偏好,我会返回JSON而不是仅使用wp_reset_query()
函数转储值。在表单值上检查the_*
并确保您没有任何未定义的索引错误并不是一个坏主意。也因为我有点强迫症,它应该是"垂直"而不是" verticle" :)
<强> PHP 强>
isset()
<强> JAVASCRIPT 强>
function CaseStudiesAjaxFunction() {
global $post;
$vertical = isset( $_GET["vertical"] )? $_GET["vertical"] : '';
$product = isset( $_GET["product"] )? $_GET["product"] : '';
$source = isset( $_GET["source"] )? $_GET["source"] : '';
$args = array(
'posts_per_page' => '12',
'tag' => array( $verticle, $product, $source)
);
$query = new WP_Query($args);
if ($query->have_posts()) : while ($query->have_posts()) : $query->the_post();
the_post_thumbnail();
the_title();
endwhile; endif;
die();
}
// Add the ajax hooks for admin
add_action( 'wp_ajax_CaseStudiesAjaxFunction', 'CaseStudiesAjaxFunction' );
// Add the ajax hooks for front end
add_action( 'wp_ajax_nopriv_CaseStudiesAjaxFunction', 'CaseStudiesAjaxFunction' );
答案 1 :(得分:0)
它返回0,因为admin-ajax.php文件以die('0')
结尾。
答案 2 :(得分:0)
当我以前完成WP Ajax调用时,我确保将echo json_encode()
所有数据转换为格式良好的JSON响应,然后调用die()
。您可以将它们包含在您返回的变量(the_title()
)中,而不是使用打印或回显的函数($title = get_the_title()
)。
您可以在数组中返回所有帖子信息和html,将其编码为JSON,然后解码:
function ajax_call(){
// Run a loop
$return['code'] = 100;
$return['content'] = get_the_content(); //etc, etc
// End loop
echo json_encode($return);
die();
}