如何制作定制的AJAX处理程序?

时间:2016-01-04 作者:Fadi

我正在尝试定制ajax处理程序,因为管理ajax。php处理从7秒到10秒的ajax请求需要很长时间,所以我在google上搜索并管理它来做一些自定义ajax处理程序。像这样的php

<?php
if (is_ajax_request()) {
    if (isset($_POST["action"]) && !empty($_POST["action"])) { //Checks if action value exists
        $action = $_POST["action"];
        switch($action) { //Switch case for value of action
            case "test": test_function(); break;
        }
    }
}

//Function to check if the request is an AJAX request
function is_ajax_request() {
    return isset($_SERVER[\'HTTP_X_REQUESTED_WITH\']) && strtolower($_SERVER[\'HTTP_X_REQUESTED_WITH\']) == \'xmlhttprequest\';
}

function test_function()
{
    $response = wc_get_product(1463);
    header(\'Content-Type: application/json\');
    echo json_encode($response);
    die();
}
我首先以文本形式发送响应$response = "test" ajax调用耗时300ms,但在尝试从另一个文件调用函数时,如$response = wc_get_product(1463); 它在响应中抛出错误Fatal error: Call to undefined function wc_get_product() in C:\\wamp\\www\\....我试着用这个来定制wordpress ajax handelajaxflow plugin 但这是同样的事情,所以请告诉我如何调用其他文件中的函数,并提前感谢您的帮助。

1 个回复
SO网友:Ján Bočínec

你必须包括WP核心功能文件,像这样的。。。

<?php
//mimic the actuall admin-ajax
define(\'DOING_AJAX\', true);

if (!isset( $_POST[\'action\']))
    die(\'-1\');

//make sure you update this line 
//to the relative location of the wp-load.php
require_once(\'../../../../../wp-load.php\'); 

//Typical headers
header(\'Content-Type: text/html\');
send_nosniff_header();

//Disable caching
header(\'Cache-Control: no-cache\');
header(\'Pragma: no-cache\');
你可以在这里了解更多信息https://coderwall.com/p/of7y2q/faster-ajax-for-wordpress 或者在这里https://wp-dreams.com/articles/2014/03/better-ajax-handler-for-wordpress-super-fast-ajax/.