使用AJAX从数据库获取数据的插件的问题

时间:2014-07-30 作者:stijn.aerts

回答了一些问题后,我编辑了代码。这是我的插件结构

stpl1
   stpl1.php
   getuser.php
在stpl1中。php我有以下代码:

<?php
/*
Plugin Name: Wordpress Plugin Stijn 1
Description: Een Wordpress plugin die data uit een database haalt en invult via Ajax 

in een form.
Version: 1.1
Author: Stijn Aerts
Author URI: http://stijnaerts.be
License: GPL2
*/

add_action( \'wp_head\', \'ajax_lookup_userdata\' );

    function ajax_lookup_userdata(){
    if (!is_admin()) {
            wp_enqueue_script(\'jquery\');
        }
    $url = plugins_url(\'getuser.php\', __FILE__);
    ?>

    <script type="text/javascript">
    jQuery(document).ready(function($){
        alert(\'test\');
    jQuery(\'#input_1_2\').change(function(){
            showUser(this.value);
        });

        function showUser(str){

            if(str==\'\'){
                jQuery(\'form\').html(\'\');
            }

            jQuery.get(<?php echo $url; ?>, { q: str }, function(response){
                jQuery(\'#input_1_3\').val(\'test\');
            });
        }
    });
    </script>
<?php
}

?>
和在getuser中。php我有以下代码:

<?php
$q = intval($_GET[\'q\']);

$con = mysqli_connect(\'localhost\',****,****,****);
if (!$con) {
  die(\'Could not connect: \' . mysqli_error($con));
}

mysqli_select_db($con,"ajax_demo");
$sql="SELECT * FROM Personeel WHERE personeelsNummer = \'".$q."\'";
$result = mysqli_query($con,$sql);

echo "test";

mysqli_close($con);
?> 
我激活了插件并转到以下页面:test website

我在第一个文本输入中输入一个数字,在第二个文本输入中应该输入“test”。但什么都没发生。。。似乎是此代码导致了故障:

jQuery.get(<?php echo $url; ?>, { q: str }, function(response){
                    jQuery(\'#input_1_3\').val(\'test\');
                });
我做错了什么?

谢谢你的帮助,我已经得到了,这是非常有帮助和学习完整。

2 个回复
最合适的回答,由SO网友:tormorten 整理而成

好吧,如果这是你的整个插件,那么由于很多原因,这是行不通的。

我猜你在这里犯了一个致命的错误。这是因为您在PHP文档中使用的是HTML(以及javascript)。

此外,如果getuser。php不位于站点的根目录下,JavaScript无法找到它。

我还将使用jQuery方法,因为您已经在使用它了。

尝试以下操作:

 <?php
/*
Plugin Name: Wordpress Plugin Stijn 1
Description: Een Wordpress plugin die data uit een database haalt en invult via Ajax in een form.
Version: 1.0
Author: Stijn Aerts
Author URI: Stijn Aerts
License: GPL2
*/

add_action( \'wp_footer\', \'ajax_lookup_userdata\' );

function ajax_lookup_userdata() {

    $url = plugins_url( \'getuser.php\', __FILE__ ); // get the url to the getuser.php-script

    ?>
    <script type="text/javascript">
    jQuery( document ).ready(function($) { // jQuery runs in noConflict mode, use this while developing for WordPress

        $(\'#input_1_2\').change(function() {
            showUser(this.value)
        });

        function showUser(str) {

            if(str == \'\') {
                $(\'form\').html(\'\');
            }

            $.get(<?php echo $url; ?>, { q: str }, function(response) {
                $(\'form\').html(response);
            });

        }
    });
    </script>
<?php
}
?> 
此外,我希望使用WordPress\' native ajax functions for plugins.

SO网友:MEDZ

首先,WordPress中的ajax代码不同于普通的ajax。其次,您不需要将Javascript添加到函数中,但是,创建JS文件并将其排队是更好的做法。以下是操作方法:

JS文件:

jQuery(document).ready(function($){ 
                $(\'#input_1_2\').change(function(){
                    jQuery.ajax({
                        type:"POST",  //request type
                        url: ajaxurl, //fixed ajax file url
                        //action is the php function to call, after that you can send any data
                        //to this function like postID.
                        data: {\'action\':\'getusers\',\'q\': \'value\'}, //function name to implement and data to send
                        //where to put the result.
                        success:function(data){
                            $("<form>").html(data);
                            console.log(data);
                        },
                        error:function(errorThrown){
                            console.log(errorThrown);
                        }

                    });
                });
            });
php文件:

function my_scripts(){
wp_localize_script( \'ajax-script\', \'ajax_object\', array( \'ajaxurl\' => admin_url( \'admin-ajax.php\' ) ) );

        wp_register_script( \'Jsfile\', get_template_directory_uri().\'/js/my_ajax_file.js\', array( \'jquery\' ) );
        wp_enqueue_script( \'Jsfile\' );
}
add_action( \'wp_enqueue_scripts\', \'my_scripts\' );

function getusers(){
    $q = $_REQUEST[\'q\'];
    //do your processing staff
    return #data;
}

结束