在jquery中使用自定义php函数 - wordpress

时间:2014-08-28 19:24:52

标签: php jquery wordpress plugins

我有一个主插件文件,需要getuser.php(也是插件文件)。 在getuser.php中,我编写了一个函数getuser()

现在在主插件文件中我尝试使用以下代码调用此函数:

主插件文件:

<?php
/*
Plugin Name: FixFormData
Description: If you want to autocomplete a form with existing data, this plugin is for you.
Version: 1.1
Author: Stijn Aerts
Author URI: http://stijnaerts.be
License: GPL2
*/

require( plugin_dir_path( __FILE__ ) . 'menu.php');
//require_once( plugin_dir_path( __FILE__ ) . 'getuser.php');

add_action( 'wp_footer', 'ajax_lookup_userdata' );

function ajax_lookup_userdata(){

    if (!is_admin()) {
            wp_enqueue_script('jquery');
        }
    ?>
<script type="text/javascript">
    jQuery(document).ready(function($){
    jQuery('#input_1_2').change(function(){showUserName(this.value);});
        function showUserName(str){
            if(str==''){jQuery('#input_1_3').val('');}
        jQuery.get("<?php echo plugins_url() . '/FixFormData/getuser.php'; ?>", { q: str }, function(response){
                    var parsed = JSON.parse(response);
                    var arr = [];
                    for(var x in parsed){ arr.push(parsed[x]);}
                    jQuery('#input_1_3').val(arr[1]);
                    jQuery('#input_1_4').val(arr[2]);
            });
        }
    });
</script>
<?php
}
?>

getuser.php:

<?php
    if (isset($_POST['q']) && !empty($_POST['q'])) {
        getuser($_POST['q']);
        exit;
    }

 function getuser($str)
{
    //$q = intval($_GET['q']);
    //include "../../../wp-load.php";
    global $wpdb;

    $myoption =  get_option( 'fixformdata_options' );
    $myoptionValue = maybe_unserialize( $myoption );    

    $result2 = $wpdb->get_row
    (
        $wpdb->prepare
        (
            "SELECT * FROM {$myoptionValue[tablename]} WHERE personeelsNummer = %d", $str
        )
    );

    if($result2) 
    {
        echo  json_encode( $result2 );
    }
}
?>

这仍然无效。

3 个答案:

答案 0 :(得分:2)

您需要将数据发送到您的功能所在的网址

$(function() {

function showUserName(str) {
    if (str === '') {
        $('#input_1_3').val('');
    }

    $.ajax({
        type: 'post',
        url: 'getuser.php', //where your function is located
        data: { whatever: value }, //post data $_POST['whatever'] = value
        success: function(data) {
            var data = JSON.parse(data); //whatever the server echoes will end up in data
            $('#input_1_3').val(data[0]);
            $('#input_1_4').val(data[1]);
        }
    });
}

$('#input_1_2').change(function() {
    showUserName($(this).val());
});
});

您还应该确保您的PHP代码已准备好响应该请求。

    <?php 

    if (isset($_POST['whatever']) && !empty($_POST['whatever'])) {
        getuser($_POST['whatever']);
        exit;
    }

    function getuser($str) {
        // logic and stuff

        echo json_encode(["whatever", "you want to return"]);
    } 

    ?>

答案 1 :(得分:2)

我认为wp_localize_script就是你要找的东西。 http://codex.wordpress.org/Function_Reference/wp_localize_script

你可以通过将json数据传递给javascript文件来保持javascript和php的分离,而wordpress将以干净优雅的方式完成这项工作。

但是如果你需要做的事情需要用ajax请求而不是页面加载,那么你必须在这里使用wp_ajax_ hook这个好的教程: http://www.smashingmagazine.com/2011/10/18/how-to-use-ajax-in-wordpress/

答案 2 :(得分:1)

听起来你的getuser()函数是用PHP编码的,对吗?假设如此,您将无法通过jQuery调用它。 PHP是一种服务器端语言。一旦它运行,就是这样,它不能在不重新加载页面的情况下再次访问,并且仍然只能由服务器端语言访问。 jQuery是客户端脚本,在用户计算机上完成。

基本上,您需要getuser()函数以某种形式的JavaScript,或者输出您想要显示的内容并让jQuery显示页面。