javascript - ajax在wp前端

标签 javascript ajax wordpress plugins

我想在 wp 插件前端而不是管理页面中使用 ajax, 我使用 wp_localize_script() 能够在前端访问 ajaxurl 它有效。 这是我的ajax代码

$j = jQuery.noConflict();

function commonProvinceChange() {

    $j(".province").change(function() {
       var selectedProvinceId = $j(this).val();
       var districts = "<option disabled selected='selected'>Select District</option>";
       $j.post(naqdina_map.ajaxurl, {
         province_id : selectedProvinceId,
         action : 'province_districts'
        }, function(data, status) {
          alert(naqdina_map.ajaxurl);
                            data = JSON.parse(data);
                            $j(".district").html(districts);
                            for ( var i = 0; i < data.length; i++) {
                                $j(".district").append(
                                        "<option value=" + data[i].id + ">"
                                                + data[i].district_name
                                                + "</option>");
                            }// for
                        });

                    });
}// commonProvinceChange()

以及我的插件 php 文件

function naqdina_front_script() {

    wp_enqueue_script ( 'jquery' );

    wp_register_script ( 'naqdina_map_script', plugins_url ( 'naqdina_map/map.js', __FILE__ ), array (
            'jquery' 
    ) );
    wp_localize_script('naqdina_map_script','naqdina_map',array('ajaxurl'=>admin_url('ajax-admin.php')));
    wp_enqueue_script ( 'naqdina_map_script' );
}//naqdina_front_script()

add_action ( 'wp_enqueue_scripts', 'naqdina_front_script' );

然后

add_action ( 'wp_ajax_province_districts', 'province_districts' );

function province_districts() {

    global $wpdb;

        $province_id = $_POST ['province_id'];

    $pname = $wpdb->get_results ( "select d.id,d.name as district_name from naqdina_districts as d join naqdina_provinces as p on(d.province_id=p.id) where p.id='" . $province_id . "'" );

    echo json_encode ( $pname );
    die (); // use die() to prevent further content

} // province_districts()

上面我的js代码中的post()方法返回整个页面的html代码,而不是province_districts()函数回显的响应。

有人可以帮忙吗?

最佳答案

您需要使用 add_action ('wp_ajax_nopriv_province_districts', 'province_districts' ); 在前端使用 AJAX。

编辑:在第 9 行的 map.js 中,您将 POST 到 "" ,它将解析为当前页面的相对 URL。如果您将其替换为 naqdina_map.ajaxurl 您的代码将正常工作。

Edit: This is what you need to do.

关于javascript - ajax在wp前端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24227104/

相关文章:

WordPress - 将单个页面拆分为多个可以被谷歌索引的 url

JavaScript split() 添加额外的逗号?

php - Javascript:如何使用服务器上的html文件而不是URL来window.open?

javascript - 如何在过滤列表中使用第 nth-child?

c# - 部分 View 未正确呈现

css - WordPress主题删除元素外的文本

javascript - 使用 jQuery.load() 查询自定义帖子类型

javascript - OOP 中 Controller 类常见吗

javascript - 使用带有 AJAX 数据源的 DataTables 的列名

jquery 对话框正在清除我的表单字段,我需要从 jquery 对话框返回一个值