TL; DR:不是Dupe - 先编码,滚动到问题底部。WordPress AJAX请求返回0
这是the link to the demo that I currently have。
在functions.php
我第一次本地化我的脚本:
function ajaxurl(){
wp_enqueue_script('product-selector', get_template_directory_uri() . '/js/ajax.js', array('jquery'));
wp_localize_script('product-selector', 'MyAjax', array(
// URL to wp-admin/admin-ajax.php to process the request
'ajaxurl' => admin_url('admin-ajax.php'),
// generate a nonce with a unique ID "myajax-post-comment-nonce"
// so that you can check it later when an AJAX request is sent
//'postCommentNonce' => wp_create_nonce('myajax-post-comment-nonce'),
)
);
}
add_action('wp_head', 'ajaxurl');
然后在剧本上我我的AJAX调用有:
function ajax_callback() {
global $wpdb; // this is how you get access to the database
// Declare our variable.
$cat = $_POST['cat'];
// Q the DB
$query = $wpdb->get_col($wpdb->prepare(
"
SELECT meta_value
FROM $wpdb->postmeta
WHERE post_category=%s
", $cat
));
header('Content-Type: application/json');
wp_send_json(json_encode($query));
}
add_action('wp_ajax_nopriv_ajax-callback', 'ajax_callback');
终于为ajax.js我:
$(document).ready(function(){
var back_end_script_url = MyAjax.ajaxurl;
$(function() {
var category_callback = function(data) {
console.log(data);
var adhesion_select = $('#adhesion');
var substrate_select = $('#substrate');
substrate_select.find('option').remove();
adhesion_select.find('option').remove();
for (var k in data) {
var option = $('<option />').val(k).html(data[k]);
adhesion_select.append(option);
}
};
var adhesion_callback = function(data) {
console.log(data);
var substrate_select = $('#substrate');
substrate_select.find('option').remove();
for (var k in data) {
var option = $('<option />').val(k).html(data[k]);
substrate_select.append(option);
}
};
var category_change = function() {
console.log('Category Changed');
var category = $(this).find(":selected").val();
var params = {
action: 'ajax-callback',
cat: category
};
console.log(params);
$.post(back_end_script_url, params, category_callback);
};
var adhesion_change = function() {
console.log('Adhesion Changed');
var adhesion = $(this).find(":selected").val();
var category = $('#cat').find(":selected").val();
var params = {
action: 'ajax-callback',
cat: category,
adhesion: adhesion
};
console.log(params);
$.post(back_end_script_url, params, adhesion_callback);
};
$('#cat').on('change', category_change);
$('#adhesion').on('change', adhesion_change);
});
});
所以我的问题是,如果你看演示,ajax只返回数字0,而不是来自db的数据。
我已经阅读了关于堆栈和wordpress交流的这个问题的所有相关问题,并尝试了所有这些问题,结果总是相同的。
我雇佣了JS代码,但这个人发誓我的结局。我不确定这是否属实,因为我在代码中找不到任何问题。
感谢您的帮助,Stack!
需求以及工作,但PHP我的问题是'行动: ajax回调' – 2014-09-03 11:27:00