无法在wordpress中使ajax工作

时间:2016-09-01 17:43:07

标签: php jquery ajax wordpress

我从wordpress开始,直到现在才遇到很多问题。

当用户更改database aming的值以更新表单输入时,我想使用ajax查看我的SELECT。使用ajaxphp轻松phpjquery,但我似乎无法理解wordpress背后的概念。

将要发布的所有php都直接放在我的插件中我的表单的文件中。出于测试的目的,我目前只是试图从导航器控制台中的js获取一些东西。

php(wordpress):

add_action( "wp_enqueue_fetch_guide", "fetch_guide" );
function fetch_guide(){
wp_enqueue_script( 'guide', plugins_url( '/js/jquery.guide.js', __FILE__ ));

    wp_localize_script('guide', 'fetchGuide', admin_url( 'admin-ajax.php' ) );
}

add_action("wp_ajax_nopriv_fetch_guide_return","fetch_guide_return");
add_action("wp_ajax_fetch_guide_return","fetch_guide_return");

function fetch_guide_return(){
    global $wpdb;
    if(isset($_POST["id"])){
        $id = $_POST["id"];
        $table = $wpdb->prefix."guide";

        $guide = $wpdb->get_row("SELECT * FROM ".$table." WHERE id_guide LIKE ".$id.";");

        print json_encode($guide);
    }
}

js:

$(function(){
    jQuery("#chooseGuide").on("change", function(){
        jQuery.ajax({
            url : fetchGuide.ajax_url,
            type : "post",
            data : {"id":guide.value},
            dataType: "json"
        }).success(function(data){
            if(data != 0){
                console.log(data);
            }
        });
    });
});

4 个答案:

答案 0 :(得分:0)

Wordpress更改.htaccess以将所有请求拉到自身。如果您正在运行ajax,您将需要放入重定向插件或从wordpress域外攻击php程序。

答案 1 :(得分:0)

您的JS文件是否已加载?在我看来,在你的wp_localize_script中,ajax_url并不完整。您是否正确指定了要从admin-ajax.php调用的操作?

fetchGuide.ajax_url的值应该类似于admin-ajax.php?action=fetch_guide_return。这是对的吗?

控制台里有什么东西吗?对不起,我还不能发表评论,没有足够的观点:p

答案 2 :(得分:0)

这里的问题是你没有正确地将ajax_url指向你的js。

更新这些行

 wp_localize_script('guide', 'fetchGuide', admin_url( 'admin-ajax.php' ) );

 wp_localize_script('guide', 'fetchGuide', array('ajax_url' => admin_url( 'admin-ajax.php' ) ));

这些将正确指出ajax_url,你的功能应该运作良好

答案 3 :(得分:0)

谢谢大家的回答。我很难理解它在wordpress中是如何工作的。

如果找到答案但必须改变我做事的大部分内容。

这就是我最后的JS:

<div class="row">
  <div class="col-xs-5 col-xs-offset-5></div>
  <div class="col-xs-2></div>
</div>

和php:

add_action( 'admin_footer', 'my_fetch_guide' );
function my_fetch_guide() { ?>
    <script type="text/javascript" >
        var ajaxurl = "<?php echo admin_url('admin-ajax.php'); ?>";
        jQuery("#chooseGuide").on("change", function(){
            jQuery.ajax({
                  type:"POST",
                  url: ajaxurl,
                  data: {
                      action: "fetch_guide_return",
                      id: jQuery(this).val()
                  },
                  dataType: "json"
            }).success(function(data){
                jQuery("#wpgc_guide_form").prepend("<input type='hidden' name='idnumber' id='idnumber' value='"+data["id_guide"]+"'/>");
                jQuery("#name").val(data["name"]);
                jQuery("#firstName").val(data["first_name"]);
                jQuery("#mail").val(data["mail"]);
                jQuery("#phone").val(data["phone_number"]);
            }).error(function(errorThrown){
                alert(errorThrown);
            } );
        })
    </script>
<?php }