【发布时间】:2017-01-20 11:14:48
【问题描述】:
我正在使用 wordpress ajax 和以下代码未将参数值 metakey: id 传递给 $_POST["metakey"]。所以var_dump($_POST) 显示array(0) { }
如果我在 PHP 函数 $key=<any meta key> 中输入变量的静态值,那么它可以正常工作
jQuery(".selectbox").change(function(){
var id = this.id;
// do a POST ajax call
$.ajax({
type: "POST",
url: '<?php echo admin_url('admin-ajax.php'); ?>',
data: ({
action: "get-mata-value",
metakey: id
}),
success: function( response ) {
jQuery.each(response ,function(index,value){
jQuery('#' +id).append('<option value="'+value+'">'+value+'</option>');
});
}
});
});
PHP:
add_action("wp_ajax_get-mata-value", "get_mata_value");
add_action("wp_ajax_nopriv_get-mata-value", "get_mata_value");
function get_mata_value()
{
global $wpdb;
$key=$_POST["metakey"];
$result=
$wpdb->get_col( $wpdb->prepare(
"
SELECT DISTINCT meta_value
FROM $wpdb->postmeta
WHERE meta_key = %s
",
$key
) );
return($result);
exit();
}
【问题讨论】:
-
首先,在浏览器开发工具网络面板中检查,发送了哪些参数,看看问题是客户端还是服务器端。看起来你在这里打开了一个 SQL 注入漏洞。
-
你的 php 代码执行了吗?你在“get_mata_value”中的反应也是错误的,你应该是
returning,而你应该是echoing。在return+后面加上exit没有任何意义 -
@yivi PHP 代码在我在查询中使用静态值时工作
-
@CBroe 没有列出名为 metakey 的参数
-
非常抱歉,您的代码错误。对 ajax 函数的响应应该是“回声”,因此您实际上会输出一些东西。如果你
return值,它永远不会到达你的 JS 代码。最重要的是:你的 PHP 被执行了吗?如果是这样,请发布(在您的问题中)vardump($_POST);的输出
标签: javascript php jquery ajax wordpress