WordPress AJAX调用未返回结果

时间:2018-04-10 作者:mdirect

我是WP的新手,也不太熟悉AJAX,但我正在尝试一个非常简单的AJAX调用,我想我已经接近了,但我无法从AJAX调用返回任何结果,为了让它正常工作,我已经将所有内容剥离到了最底层,我只是从PHP AJAX函数返回字符串“这是AJAX数据结果”,但即使这样也似乎不起作用。现在我收到我的测试警报…

警报(“jquery步骤1”);-工作正常

警报(“jquery步骤2”);-工作正常

警报(\'ajax结果:\'。响应);-**未显示**

警报(“jquery步骤3”);-工作正常

我已经创建了一个自定义插件和自定义js和php文件,如下所示。。。

*********c4l自定义函数。php********

<?php
/**
* Plugin Name: C4L Custom Functions Plugin
* Description: This plugin contains C4l custom functions, scripts and css 
styles.
* Author: C4L
* Version: 1.0
*/

function c4l_custom_script_and_style_includer() {
    wp_enqueue_script( \'c4l-js\', plugins_url( \'js/c4l-custom-scripts.js\' , __FILE__ ) );
    wp_enqueue_style( \'c4l-css\', plugins_url( \'css/c4l-custom-styles.css\' , __FILE__ ) );
}

add_action( \'wp_enqueue_scripts\', \'c4l_custom_script_and_style_includer\' );

add_action( \'wp_ajax_wps_get_time\', \'wps_get_time\' );
add_action( \'wp_ajax_nopriv_wps_get_time\', \'wps_get_time\' );

function wps_get_time() {
    // $format = $_POST[\'format\'];
    echo(\'This is AJAX data results\');
    //echo date($format);
   die();
}
?>
*******c4l自定义脚本。js公司********

document.addEventListener("DOMContentLoaded", function(event) {
    jQuery(\'#pulldown1\').change(function(){ 
        alert(\'jquery step 1\');
        var timeformat = \'U\';
        alert(\'jquery step 2\');
        jQuery.ajax({
            type: "POST",
            url: "admin-ajax.php",
            data: { action: \'wps_get_time\', format: timeformat },
            success: function ( response ) {
                alert(\'ajax result: \'.response);
            }
        });
        alert(\'jquery step 3\');
    }); 
});

1 个回复
最合适的回答,由SO网友:Jacob Peattie 整理而成

有两个问题:

您没有将AJAX请求发送到正确的URL对于第一期,相对URL"admin-ajax.php" 是行不通的。如果你在这样的页面上/about-us/ 然后jQuery将请求发送到/about-us/admin-ajax.php, 这是不存在的。

设置URL最可靠的方法是通过PHP使用admin_url() 功能和用途wp_localize_script() 要将值发送到脚本,请执行以下操作:

function c4l_custom_script_and_style_includer() {
    wp_enqueue_style( \'c4l-css\', plugins_url( \'css/c4l-custom-styles.css\' , __FILE__ ) );
    wp_enqueue_script( \'c4l-js\', plugins_url( \'js/c4l-custom-scripts.js\' , __FILE__ ) );
    wp_localize_script( \'c41-js\', \'c41\', [\'ajaxurl\' => admin_url(\'admin-ajax.php\')] );
}
add_action( \'wp_enqueue_scripts\', \'c4l_custom_script_and_style_includer\' );
这条额外的线所做的是:如果c4l-js (第一个数组)排队,创建一个名为c41 (第二个参数)将键和值传递给第三个参数。我们已经为admin ajax提供了正确的URL。php。

因此,现在在脚本中,将URL设置为:

url: c41.ajaxurl,
另一个问题是如何将响应连接到JavaScript中的字符串:

alert(\'ajax result: \'.response);
. 是PHP中用于连接字符串的字符,但在JavaScript中需要使用+:

alert(\'ajax result: \' + response);

结束