如何使用wp_end_json_error?

时间:2016-10-05 作者:Swen

我很难理解wp\\u send\\u json\\u error如何返回错误消息。只要不满足任何错误条件,它就可以正常工作。但如果出现错误,则不会返回任何内容。

如何返回中设置的错误消息wp_send_json_error() 何时出现错误?

查看我的代码:

function submit_youtube_callback() {
    check_ajax_referer( \'randomnonce\', \'security\' );

    if (    !isset($_POST[\'post_id\']) || 
            !is_numeric($_POST[\'post_id\']) || 
            !get_post_status($_POST[\'post_id\']) || 

            !isset($_POST[\'yt_url\']) ||
            !isset($_POST[\'terms\'])
            ) {

        wp_send_json_error( \'Error: Invalid data!\' );
    }

    // Check if terms are checked
    $terms = $_POST[\'terms\'];
    if ( $terms != true ) {
        wp_send_json_error( \'Error: You must accept the terms.\' );
    }

    // Check if valid youtube URL   
    $youtube_url = $_POST[\'yt_url\'];
    $preg = \'~^(?:https?://)?(?:www\\.)?(?:youtube\\.com|youtu\\.be)/watch\\?v=([^&]+)~x\';
    $has_match = preg_match($preg, $youtube_url, $matches); 
    if ( empty($matches[1]) ) {
        wp_send_json_error( \'Error: You did not enter a valid YouTube URL.\');
    }   

    echo \'<p>youtube: \'. $youtube_url .\'</p>\';  
    echo \'<p>terms accepted: \' . $terms .\'</p>\';

    wp_die();
} add_action( \'wp_ajax_cp_narrations_callback\', \'submit_youtube_callback\' );
和Javascript:

function submit_youtube_javascript() {
    if ( is_single() ) {

        $ajax_nonce = wp_create_nonce( "randomnonce" );

        ?>
        <script>
            ( function( $ ) {
                var ajaxurl = "<?php echo admin_url(\'admin-ajax.php\'); ?>",
                    submit_youtube = $(\'#submitYouTubeForm\');

                // Star rating button
                $(submit_youtube).on(\'submit\', function(event) {
                    event.preventDefault();

                    var submit_youtube_url = $(\'#submitYouTubeURL\').val(),
                    submit_youtube_terms = $(\'#youtube_terms\').is(\':checked\');

                    // Data to be sent to function
                        var data = {
                            \'action\': \'submit_youtube_callback\',
                            \'security\': \'<?php echo $ajax_nonce; ?>\',
                            \'post_id\': <?php echo get_the_ID(); ?>,

                            \'yt_url\': submit_youtube_url,
                            \'terms\': submit_youtube_terms
                        };

                        // Send Data
                        jQuery.post(ajaxurl, data, function(response) {
                            submit_youtube.replaceWith(response);
                        });                     
                });
            } )( jQuery );
        </script> 
        <?php
    }
} add_action( \'wp_footer\', \'submit_youtube_javascript\', 100 );

1 个回复
SO网友:websupporter

wp_send_json_error( \'Error: Invalid data!\' )

将回显JSON字符串:{"success":false,"data":"Error: Invalid data!"}

关于wp_send_json_error() 是,参数也可以是WP_Error 对象

而不是wp_send_json_success( \'Everything okay.\' ) 它回显此JSON字符串:{"success":true,"data":"Everything okay."}

两者在内部都依赖于wp_send_json() 正确地回显JSON数据die() 之后

但如果出现错误,则不会返回任何内容。

事实上,我现在简直不敢相信。但是,当我查看您的JS代码时,您没有正确处理JSON响应。实际上,如果一切正常,您将返回HTML$(\'#submitYouTubeForm\'). 但是对于JSON响应,您没有HTML,只有JSON响应。

使用console.log( response ) 看看你是否真的没有得到JSON字符串。您应该考虑对所有响应使用JSON,或者不使用wp_send_json_error() 只需返回一条简单的HTML错误消息die() 你自己去吧。

相关推荐

WordPress:在Gutenberg插件迁移到lock.json后,在JavaScript中使用多语言的本地化/翻译不再有效

我做了a plugin with existing localization on WordPress.org 免费。我迁移到block。并通过将其与npx @wordpress/create-block todo-list. 我通读了一遍the Block Editor guide on internationalization 但在todo列表示例中,它的工作方式似乎有一些不同。结果是我所有的__ php函数工作并转换所有字符串。但是我的__ JavaScript函数不会在翻译时翻译任何翻译。word