首页 > 解决方案 > 在 ajax 响应 wordpress 插件中获取 0

问题描述

我为用户创建了一个插件,以检查他们所在位置是否提供交付选项。后端代码工作正常,我可以添加邮政编码。数据显示在管理表中。在前端,我试图通过 ajax 调用检查数据,即使我输入现有的邮政编码或错误,如果使用 if 语句得到响应为 0。请帮助我哪里错了。谢谢。

这是 JavaScript Ajax 代码

jQuery(document).ready(function() {
var zipcodeInput = jQuery("#checkzipcode").find("input[name='checkzipcode']");
var zipcodeSubmit = jQuery("#ajax-form");
zipcodeSubmit.submit(function(e) {
    e.preventDefault();
    jQuery.ajax({
        type: "POST",
        url: my_action_callback.ajaxurl,
        dataType: 'html',
        data: {
            action: 'my_action_callback',
            checkzipcode: zipcodeInput.val()
        },
        success: function (data) {
            jQuery('#zipcode-result').html(data);
        },
        error: function (data) {
            console.log('error');
        }
    });
});
});

这是 THML 代码

function check_zipcode_for_delivery_frontend(){ ?>
    <div class="woo-zcd-form">
        <form method="POST" id="ajax-form">
            <label>Enter Zipcode:</label>
            <input type="text" name="checkzipcode" id="checkzipcode" required>
            <input type="submit" name="submit" value="Check Zipcode" id="submit-zipcode">
        </form>
    </div>

    <div id="zipcode-result"></div>

<?php }

add_shortcode('check_zipcode_delivery', 'check_zipcode_for_delivery_frontend');

这是PHP代码

add_action('wp_enqueue_scripts', function() {
  wp_enqueue_script( 'my_custom_script', plugin_dir_url( __FILE__ ) . 'assets/js/custom.js', array('jquery') );
  wp_enqueue_script( 'jquery' );
  wp_localize_script( 'my_custom_script', 'my_action_callback', array( 'ajaxurl' => admin_url('admin-ajax.php') ) );
});


add_action('wp_ajax_my_action_callback', 'my_action_callback');
add_action('wp_ajax_nopriv_my_action_callback', 'my_action_callback');

function my_action_callback() {
    global $wpdb;
    $table_name = $wpdb->prefix . "deliverybyzipcode";
    $checkzipcode = $_POST['checkzipcode'];
    $sql = "SELECT * FROM ".$table_name." WHERE delivery_zipcode = '$checkzipcode'";

    $result = $wpdb->query($sql);
    $rows = $result->num_rows;
    if($rows == $checkzipcode) {
        echo "Yes! Our delivery service is available in your area.";
    }
    else {
        echo 'Sorry! we are currently no delivering in your area.';
    }
}

标签: javascriptphpjqueryajaxwordpress

解决方案


我认为这条线造成了麻烦。

更改此行$sql = "SELECT * FROM ".$table_name." WHERE delivery_zipcode = '$checkzipcode'";

对这个$sql = "SELECT * FROM ".$table_name." WHERE delivery_zipcode = '".$checkzipcode."'";

从您的问题中不清楚您的数据库中的交付代码类型是什么,因此您也应该注意这一点。当然,还要注意 SQL 注入。


推荐阅读