【问题标题】:Using custom php functions in jquery - wordpress在 jquery 中使用自定义 php 函数 - wordpress
【发布时间】:2014-08-28 19:24:52
【问题描述】:

我有一个需要 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 );
    }
}
?>

这仍然不起作用。

【问题讨论】:

  • 您正在尝试使用 javascript 调用 php 函数?你不能这样做
  • 是的,我知道,我也试过 等等
  • getuser() 是做什么的?它是否返回一个变量?
  • 返回json数据
  • 你可能想试试wp_localize_script。这样您就可以将 json 信息传递给 jQuery。一个很好的参考是:https://pippinsplugins.com/use-wp_localize_script-it-is-awesome/。 cmets 也很有用。

标签: php jquery wordpress plugins


【解决方案1】:

我认为 wp_localize_script 是您正在寻找的。 http://codex.wordpress.org/Function_Reference/wp_localize_script

您可以通过将 json 数据传递给 javascript 文件来保持 javascript 和 php 分开,而 wordpress 将以一种干净优雅的方式做到这一点。

但是,如果您必须使用 ajax 请求而不是页面加载来完成,那么您必须使用 wp_ajax_ 挂钩,这里有一个很好的教程: http://www.smashingmagazine.com/2011/10/18/how-to-use-ajax-in-wordpress/

【讨论】:

【解决方案2】:

你需要将数据发送到你的函数所在的url

$(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"]);
    } 

    ?>

【讨论】:

  • 感谢您的帮助,我编辑了我的代码,我的所有代码现在都在 OP 中,但它仍然无法正常工作......
  • 另外,请记住,这是针对 wordpress 的,我需要正确的钩子,我有一个很好的解决方案,但它没有正确的钩子。
  • 抱歉,我忘记在 ajax 请求中添加类型。老实说,我对wordpress一无所知,但这应该可以。你到底要返​​回什么?我可以看到 php 吗?
  • “getuser.php”是否在子目录中?这需要在 url 中指定。另外,您是否尝试过提醒从服务器返回的数据以查看其中包含的内容?
  • 我只是返回一些数据库数据,文本。你想看什么php?
【解决方案3】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-02-14
    • 1970-01-01
    • 1970-01-01
    • 2011-01-06
    • 1970-01-01
    • 2012-05-07
    • 2018-05-27
    相关资源
    最近更新 更多