使用Ajax的父子Selectbox Wordpress

时间:2015-08-11 09:07:06

标签: php ajax wordpress wordpress-plugin

我只是想选择父盒然后根据父母要孩子,我的目的是创建父(国家)和子(城市)选择框,当有人选择国家然后它应该显示该国家的城市存储在DB中。用户选择国家时页面不应该重新加载,但是它应该点击数据库并获取该国家/地区的城市,我创建了一个Wordpress页面,并且从那里开始,我只是放置我的html的父和子选择框。

HTML页面/ Wordpress页面

<select name="PER_COUNTRY" id="PER_COUNTRY">
<?php $rows= $wpdb->get_results($wpdb->prepare("SELECT * FROM country ORDER BY countryname" ,13,'gargle'),ARRAY_A);
foreach($rows as $row){?>
<option value="<?php echo $row["countrycode"]?>"><?php echo $row["countryname"]?></option>
</select>

使用相同名称ajax-test创建插件文件夹,并在其中放置2个文件1是ajax-test.php和test.js

ajax-test.php的代码如下:

<?php
/**
 * Plugin Name: Ajax Test
 * Plugin URI: http://test.org
 * Description: Allows users to select cities
 * Version: 1.0.0
 * Author: Javed
 * Author URI: http://test.org
 * License: GPL2
 */
 add_action( 'wp_enqueue_scripts', 'my_enqueue' );
 function my_enqueue() {
 wp_enqueue_script( 'ajax-script', plugins_url( '/test.js', __FILE__ ), array('jquery'));
 wp_localize_script( 'ajax-script', 'ajax_object', array( 'ajax_url' => admin_url( 'admin-ajax.php' )));
 }

 function my_action() {
 $country_id = $_REQUEST['country_id'];
 echo $country_id;
 die(); 
 }
 add_action('wp_ajax_my_action', 'my_action' );
 add_action('wp_ajax_nopriv_my_action', 'my_action');
 ?>

在上面的代码中我没有调用全局数据库,如果我可以在这里处理用户选择框的值并且可以发送回子选择框,那么我可以自己进行数据库和表查询。

和test.js文件代码是:

 jQuery(document).ready(function(){
 jQuery('#PER_COUNTRY').change(function(){  
var country_id = jQuery(this).val();
 // alert(country_id);
 jQuery.ajax
        ({
        type: 'post',
        url: ajax_object.ajax_url,
        data: {
            action : 'my_action',
            country_id : country_id,
            },
        success: function(data)
            {
            alert(data);
            } 
        });
     });
 });

你可以看到// alert(country_id);在test.js中评论这是为了测试,是的,它正在获得价值,但我认为问题在于Ajax帖子,需要你在这方面的帮助,请指导我。我在这里做了什么错,我已经阅读了很多教程,但我在代码中没有发现任何错误。

1 个答案:

答案 0 :(得分:0)

好吧,我现在正在回答我的问题,因为我自己解决了这个问题,我只想分享答案,这样如果有人也面临同样的问题可以解决它,我的所有代码都很完美,我想念的是只是来自函数文件的jQuery Enqueue,我确实包含了来自页眉/页脚的jquery,并且它适用于所有jQuery操作但是当涉及到Ajax时,我们必须从Function定义它,这里是一种在Function中定义jQuery的方法: p>

if (!is_admin()) add_action("wp_enqueue_scripts", "my_jquery_enqueue", 11);
function my_jquery_enqueue() {
wp_deregister_script('jquery');
wp_register_script('jquery', "http" . ($_SERVER['SERVER_PORT'] == 443 ? "s" : "") . "://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js", false, null);
wp_enqueue_script('jquery');
}

我还是要感谢WisdmLabs,他们至少试图解决我的问题。 :)