Javascript WordPress AJAX请求返回0
TL;DR:不重复-首先编码,滚动到底部查找问题 这是 在Javascript WordPress AJAX请求返回0,javascript,php,jquery,ajax,wordpress,Javascript,Php,Jquery,Ajax,Wordpress,TL;DR:不重复-首先编码,滚动到底部查找问题 这是 在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( /
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);
});
});
$(文档).ready(函数(){
var back\u end\u script\u url=MyAjax.ajaxurl;
$(函数(){
var category_callback=函数(数据){
控制台日志(数据);
var附着力_select=$(“#附着力”);
变量基板_选择=$(“#基板”);
基板_select.find('option').remove();
粘着_select.find('option').remove();
for(数据中的var k){
var option=$('').val(k).html(数据[k]);
附着力(选择追加)(选件);;
}
};
var\u callback=函数(数据){
控制台日志(数据);
变量基板_选择=$(“#基板”);
基板_select.find('option').remove();
for(数据中的var k){
var option=$('').val(k).html(数据[k]);
基板_选择。追加(选项);
}
};
变量类别_变化=函数(){
console.log('Category Changed');
var category=$(this.find(“:selected”).val();
变量参数={
操作:“ajax回调”,
类别:类别
};
控制台日志(params);
$.post(返回\结束\脚本\ url、参数、类别\回调);
};
var粘着变化=函数(){
console.log(“粘着变化”);
var粘着=$(this.find(“:selected”).val();
var category=$(“#cat”).find(“:selected”).val();
变量参数={
操作:“ajax回调”,
类别:,
附着力:附着力
};
控制台日志(params);
$.post(back\u end\u script\u url、参数、粘附\u回调);
};
$('cat')。关于('change',category_change);
$('附着力')。在('变化',附着力变化)上;
});
});
因此,我的问题是,如果您查看演示,ajax只返回数字0,而不是来自db的数据
我已经在stack和wordpress交换上阅读了关于这个问题的所有相关问题,并尝试了所有问题,结果总是一样的
我把JS代码租出去了,但那家伙对我发誓。我不确定这是不是真的,因为我在代码中找不到任何问题
谢谢你的帮助,斯塔克 在ajax调用中发送的参数中,似乎缺少了“action”属性 您的params对象应该是:
var params = {
action: "ajax-call",
cat: category
};
希望这有帮助
问候,
马塞洛仍然返回一个0。不过,我觉得我忽略了一件简单的事情。对不起,我在上面的回答中写错了“动作”。它应该是“ajax回调”。你也试过那个吗?另外,您是否调试了代码,并且确定它正在访问您的函数“ajax回调”?它正在访问我的函数。那部分工作正常。现在,函数没有返回任何结果-只返回
[]
,让我的代码看起来像:[]
如何使用此解决方法,而不是“正确的方式”:>echo json_encode($query);模具();而不是>标题('Content-Type:application/json');>wp_send_json(json_encode($query));相同的结果:[]
是返回的所有结果。我想问题一定是我的db查询。php也需要工作,但我的问题是action:ajax回调