首頁>Web>source

我正在開發一个簡單的插件,该插件顯示HTML表單,使用者可以在其中輸入用於查詢外部API的關鍵字.目前,我已经設置了表單和相關的jQuery,但是当傳遞给插件的PHP檔案時,我得到的响應仅為0。這時,我只是想得到除0以外的任何响應(請參见 echo "Whyyyy" 部分).我一直在搜尋網際網路,覺得自己已经尝試了所有建議的內容,使我覺得自己在某个地方犯了錯誤。

任何帮助將不胜感激.

最新回復
  • 5月前
    1 #

    您的ajax發佈可呼叫函式操作" get_news_callback "不能在您的類__construct()中使用,因為您可以在该類中使用簡單的wordpress操作。

    在Class堂上使用動作:

    add_action('wp_ajax_get_news_callback', array($this, 'get_news_callback')); add_action('wp_ajax_nopriv_get_news_callback', array($this, 'get_news_callback'));

    您的指令碼也会更改,因此您可以使用以下指令碼来获取ajax响應。

    defined('ABSPATH') or die('Ah ah ah. You didn\'t say the magic word.');
    class News_search {
    // Load scripts upon class initiation
    public function __construct() {
        add_action('wp_enqueue_scripts', array($this, 'enqueue_scripts'));
        add_action('wp_ajax_get_news_callback', array($this, 'get_news_callback'));
        add_action('wp_ajax_nopriv_get_news_callback', array($this, 'get_news_callback'));
        add_shortcode('wp_news_search', array($this, 'wp_news_search_form'));
    }
    function enqueue_scripts() {
        // Enqueue CSS
        wp_enqueue_style('wp-news-search', plugins_url('/css/wp-news-search.css', __FILE__));
        // Enqueue and localize JS
        wp_enqueue_script('ajax-script', plugins_url('/js/wp-news-search_query.js', __FILE__), array('jquery'), null, true);
        wp_localize_script('ajax-script', 'ajax_object',
            array('ajax_url' => admin_url('admin-ajax.php'),
                'security' => wp_create_nonce('my-string-shh'),
            ));
    }
    // Handle AJAX request
    public function get_news_callback() {
        
        check_ajax_referer('my-string-shh', 'security');
        $keyword = isset($_POST['form_data']) ? $_POST['form_data'] : null;
        
        echo $keyword;
        
        die();
    }
    
    public function wp_news_search_form() {
        $content .= '<form id="wp-news-search__form">
                        <label>
                            <input type="text" name="news-keyword" placeholder="' . __('Enter keywords') . '" id="news-keyword" required>
                        </label>
                        <button id="wp-news-search__submit">' .
                         __('Search for news', 'wp-news-search') .
                       '</button>
                    </form>';
         return $content;
       }
     }
     new News_search();
    

    您的Js

    (function ($) {
    $(document).ready(function () {
        $('#wp-news-search__form').submit(function (event) {
            event.preventDefault();
            // const keyword = $('#query-input').val();
            const values = $(this).serialize();
    
            if (values) {
                // send stuff to php
                console.log(values);
                const data = {
                    action: 'get_news_callback',
                    status: 'enabled',
                    type: "POST",
                    security: ajax_object.security,
                    form_data: values 
                }
                $.post(ajax_object.ajax_url, data, function(response) {
                    if (response) {
                        console.log(`Response is: ${response}`);
                    }
                })
                    .fail(() => { console.error('error'); })
                    .always(() => { console.log('form submitted') });
            }
        });
    
       });
    })(jQuery);
    

  • 5月前
    2 #

    check_ajax_referer() 功能將 die() 如果檢查失败,這就是為什麼您之後看不到任何內容的原因,而失败的原因是给 wp_create_nonce()的操作名稱 和 check_ajax_referer() 不匹配。

    在這裏,您使用的是一个字元串, 'my-string-shh'

    'security' => wp_create_nonce('my-string-shh'),
    

    但是這裏您使用的是另一个 'my-special-string'

    check_ajax_referer('my-special-string', 'security');
    

    這些需要匹配。

  • wordpress:如何通過ajax和jquery更新資料
  • drupal:如何呈現完整的profile2?