2

我正在开发一个 WordPress 插件,一切正常。唯一的问题是,我在 jQuery 中对 php 文件中的某些代码进行了 ajax 调用。它可以工作,但它只是一个文件中的几个 php 命令。这在 WP 中是不好的做法,一切都应该在一个函数中并使用钩子附加。

这是 output.php 中的代码

if(isset($_POST['test']) && $_POST['test'] == 'ON'){
    if(isset($_POST['id'])){
        $productId  = intval(preg_replace('/[^0-9]+/', "", $_POST['id']));
        if ($productId > 1){
            $results = get_option( 'test_options' );
            $result = $results[$productId];
            unset($results);
            echo json_encode($result);
            die();
        }
    }
}

这是 jQuery 脚本中的 AJAX 调用

$.ajax({
        type: "POST",
        url: "output.php",
        data: {
            'test'  : "ON",
            'id'    : productId
        }, 
        success: function(results) {
            result = $.parseJSON(results);
            createArray(result);
        }
    });

这工作正常。但是,当我将 output.php 中的代码更改为函数并使用如下操作挂钩时:

function getInfo(){
    $test   = $_POST['test']);
    $id = $_POST['id']);

    if(isset($test) && ($test == "ON")){
        $result = '';
        if(isset($id)){
            if ($id > 1){
                $results = get_option( 'test_options' );
                $result = $results[$id];
                echo json_encode($result);
                die();
            }
        }
    }
}


add_action('wp_ajax_getInfo','getInfo');
add_action('wp_ajax_nopriv_getInfo','getInfo');

并将 jQuery 脚本更改为:

$.ajax({
        url: my_ajax_script.ajaxurl,
        type: 'POST',
        data: {
            action  : 'getInfo',
            test    : "ON",
            id  : productId
        }, 
        cache: false,
        success: function(results) {
            result = $.parseJSON(results);
            console.log(result);
            alert("succes");
            createArray(result);
        }
    });

它不起作用。我错过了什么?我已经检查了很多关于 stackoverflow 的问题,描述了相同的问题,检查了解决方案,但找不到我哪里出错了。

4

1 回答 1

0

一旦我将 output.php 文件的代码添加到包含wp_localize_script()AJAX url 命令的文件中,它终于开始工作了。

对于 AJAX 调用的前端使用,您需要此命令来使 AJAX 可用。默认情况下,在管理区域 AJAX 可用。

于 2013-06-20T19:59:20.610 回答