我有两个选择类别和类型,类型应该取决于类别选择,从数据库,这是我的代码。
HTML
$ps_type_table_name = $wpdb->prefix . 'ps_type'; ?>
<form method="post" action="">
<label>Category :</label><br>
<select id="category" name="category"
class="form-control">
<?php
$categories = $wpdb->get_col('SELECT DISTINCT category FROM '.$ps_type_table_name);
foreach ($categories as $category){ ?>
<option value="<?php echo $category; ?>"><?php echo $category; ?></option>
<?php
}
?>
</select><br><br>
<label>Types :</label><br>
<select id="type" name="type" class="form-control">
</select><br><br>
</form>
的Ajax
$(document).ready(function(){
$('#category').on('change',function(){
var category = $(this).val();
if(category){
$.ajax({
type:'POST',
url:'category-type-select.php',
data:'category_name='+category,
success:function (html) {
$('#type').html(html);
}
});
}
});
});
PHP
class Get_category_type{
function __construct()
{
if (isset($_POST['category_name']) && !empty($_POST['category_name'])) {
global $wpdb;
$category = $_POST['category_name'];
$ps_type_table_name = $wpdb->prefix . 'ps_type';
$types = $wpdb->get_col($wpdb->prepare('SELECT DISTINCT type FROM ' . $ps_type_table_name . ' WHERE category=%s', $category));
foreach ($types as $type) {
echo '<option value="' . $type . '">' . $type . '</option>';
}
}
}
}
实际上,这是一个使用oops的WordPress插件,请帮我解决这个问题,我认为问题是在ajax代码中获取PHP文件,请告诉我如何在ajax URL中编写路径以获取WordPress中的该类文件插件
答案 0 :(得分:0)
问题是你要替换选择元素的选项。你需要在ajax php中也有select元素。
的Ajax:
def mncity(arr):
dx = np.diff(arr)
return np.all(dx <= 0) or np.all(dx >= 0)
PHP:
$.ajax({
type:'POST',
url:'category-type-select.php',
data:{category_name:category},
success:function (html) {
//
}
});
答案 1 :(得分:0)
1st:我认为只有在创建新对象实例时才会调用__construct
函数。所以你需要创建实例来运行构造函数。
class Get_category_type {
function __construct()
{
if (isset($_POST['category_name']) && !empty($_POST['category_name'])) {
global $wpdb;
$category = $_POST['category_name'];
$ps_type_table_name = $wpdb->prefix . 'ps_type';
$types = $wpdb->get_col($wpdb->prepare('SELECT DISTINCT type FROM ' .
$ps_type_table_name . ' WHERE category=%s', $category));
foreach ($types as $type)
{
$result.= '<option value="' . $type . '">' . $type . '</option>';
}
echo $result;
}
}
}
$obj = new Get_category_type(); //create instance here .
第二名:在foreach这样的
之后不要回复foreach内部的回声foreach ($types as $type)
{
$result.= '<option value="' . $type . '">' . $type . '</option>';
}
echo $result;
第三:你需要附加像这样的选项
$('#type').empty();
$('#type').append(html);
第4名:数据应该在ajax中正确发送
data:{category_name:category},
第5名:在ajax中添加错误处理程序
$.ajax({
type:'POST',
url:'category-type-select.php',
data:{category_name=category},
success:function (html) {
$('#type').empty();
$('#type').append(html);
},
error: function (request, status, error) {
alert(request.responseText);
}
});
测试目的:
出于测试目的。将POST方法更改为GET方法,如if (isset($_GET['category_name']) && !empty($_GET['category_name'])) { .. }
然后直接在浏览器中调用url。 http://yoursite.com/category-type-select.php?category_name=here_any_one_category_name
。如果它运行,那么porblem就在你的ajax部分。
答案 2 :(得分:0)
我得到了我的问题的解决方案,所以我发布了答案,以帮助一些需要的人,在WordPress中,有单独的钩子是使用ajax函数,这个程序如何使用它。
HTML
$ps_type_table_name = $wpdb->prefix . 'ps_type'; ?>
<form method="post" action="">
<label>Category :</label><br>
<select id="category" name="category"
class="form-control">
<?php
$categories = $wpdb->get_col('SELECT DISTINCT category FROM '.$ps_type_table_name);
foreach ($categories as $category){ ?>
<option value="<?php echo $category; ?>"><?php echo $category; ?></option>
<?php
}
?>
</select><br><br>
<label>Types :</label><br>
<select id="type" name="type" class="form-control">
</select><br><br>
通过更改第一个选项
来获取第二个选项值的PHP代码 public function get_type_by_category(){
//echo file_get_contents('php://input'); for testing
if (isset($_POST['ctgry']) && !empty($_POST['ctgry'])) {
global $wpdb;
$result = "";
$category = $_POST['ctgry'];
$ps_type_table_name = $wpdb->prefix . 'ps_type';
$types = $wpdb->get_col($wpdb->prepare('SELECT DISTINCT type FROM ' . $ps_type_table_name . ' WHERE category=%s', $category));
foreach ($types as $type) {
$result .= '<option value="' . $type . '">' . $type . '</option>';
}
echo $result;
}
}
将此功能挂钩到wordpress
add_action('wp_ajax_get_type_by_category','get_type_by_category');
add_action('wp_ajax_nopriv_get_type_by_category','get_type_by_category');
Ajax.js
$(document).ready(function () {
$('#category').change(function(){
var ctgry=$(this).val();
$.ajax({
type:"post",
url:ajaxurl,
data:{'action':'get_type_by_category','ctgry':ctgry},
cache:false,
success:function (html) {
$("#type").html(html);
//alert(html);
},
error:function(request,string_error,error){
alert(string_error);
}
});
});
$('#category').change();
});
将js连接到WordPress
public function enqueue_scripts(){
wp_enqueue_script('ps-admin-page-js', plugins_url('js/admin-page.js', dirname(__FILE__)),array('jquery'),'1.1.1',true);
}
add_action('wp_footer', 'enqueue_scripts');
我发现这种方式在WordPress插件开发中使用ajax,它对我有用。