JQuery php请求返回一个奇怪的结果

时间:2021-11-03 作者:AdamCarder

我有一个奇怪的小故障发生在我身上,我不知道我是如何产生它的,或者它是否是正常的。

我正在开发自己的插件,当一个足球队/足球队被输入到一个框中时,它会检查它是否已经在数据库中。

以下是我的代码行

add_action( \'admin_footer\', \'fws_teamcheck_javascript\' );
function fws_teamcheck_javascript() { ?>
<script type="text/javascript">
    jQuery(document).on(\'focusout\', \'.name\', function () {
        var name = this.value;
        //alert(name);
        jQuery.ajax({
            type: \'POST\',
            url: ajaxurl,
            data: {"action": "fws_check_name", "name": name},
            success: function (data) {
                alert(data);
                if(data==\'true\') {
                    $(".name").css("border", "solid 1px red");
                }
                if(data==\'false\') {
                    $(".name").css("border", "solid 1px green");
                }
            }
        });
    });
</script>
<?
}

function fws_check_name(){
    global $wpdb;
    $dbtable = $wpdb->prefix . \'fws_team_data\';
    $name = $_POST[\'name\'];
    $data = $wpdb->get_results($wpdb->prepare("SELECT * FROM $dbtable WHERE name = $name"));
    if($data) { echo \'true\'; }else{ echo \'false\'; }
    
}
add_action( \'wp_ajax_fws_check_name\', \'fws_check_name\' );
add_action( \'wp_ajax_nopriv_fws_check_name\', \'fws_check_name\' );
当我离开输入时,它会以以下方式发出警报:true0false0 是否有在末尾添加0的原因?

感谢您的投入。

2 个回复
SO网友:AdamCarder

我在重读AJAX页面时发现https://codex.wordpress.org/AJAX_in_Plugins 你必须把die(); 在函数末尾。

我的代码现在看起来像这样,并按预期工作。

add_action( \'admin_footer\', \'fws_teamcheck_javascript\' );
function fws_teamcheck_javascript() { ?>
<script type="text/javascript">
    jQuery(document).on(\'focusout\', \'.name\', function () {
       var name = this.value;
       jQuery.ajax({
           type: \'POST\',
           url: ajaxurl,
           data: {"action": "fws_check_name", "name": name},
           success: function (data) {
               if(data==\'true\') {
                   $(".name").css("border", "solid 1px red");
               }
               if(data==\'false\') {
                   $(".name").css("border", "solid 1px green");
               }
           }
       });
    });
</script>
<?
}

function fws_check_name(){
    global $wpdb;
    $dbtable = $wpdb->prefix . \'fws_team_data\';
    $name = $_POST[\'name\'];
    $sql = $wpdb->prepare("SELECT * FROM $dbtable WHERE name = \'$name\'");
    $data = $wpdb->get_results($sql);
    if(count($data) >= \'1\'){ echo \'true\'; }else{ echo \'false\'; }
    die();
    
}
add_action( \'wp_ajax_fws_check_name\', \'fws_check_name\' );
add_action( \'wp_ajax_nopriv_fws_check_name\', \'fws_check_name\' );

SO网友:demopix

以下内容对我来说没有错:

$data = $wpdb->get_results( $wpdb->prepare( "SELECT * FROM $dbtable WHERE name = $name" ) );
它应该是:

$data = $wpdb->get_results( $wpdb->prepare( "SELECT * FROM {$dbtable} WHERE name = %s", $name ) );
那你就可以die(); 在函数末尾,如:

if( count( $data ) >= 1 ){
    die( \'true\' );
} else {
    die( \'false\' );
}