javascript - 在 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.';
}
}
解决方案
我认为这条线造成了麻烦。
更改此行$sql = "SELECT * FROM ".$table_name." WHERE delivery_zipcode = '$checkzipcode'";
对这个$sql = "SELECT * FROM ".$table_name." WHERE delivery_zipcode = '".$checkzipcode."'";
从您的问题中不清楚您的数据库中的交付代码类型是什么,因此您也应该注意这一点。当然,还要注意 SQL 注入。
推荐阅读
- grails - 在 grails 2 中加载 jquery 库失败了?
- java - Thread::getId() 的用例?
- javascript - 如何在不调用它们的情况下传递承诺数组?
- docker - 如何获取基于rhel7的tomcat docker镜像?
- ms-word - MailMerge 字段中的多个条件
- regex - 我正在寻找使用 REGEXP_SUBSTR 从给定字符串集中提取子字符串
- html - 网络抓取 rvest 问题篮球运动员
- ssis - 无法使用 SSIS 包使用数据工厂将数据导入 Azure 数据仓库
- z3 - 你知道如何为每个 z3 Array 元素设置“弱”初始值吗?
- c++ - 如何以抽象函数类型制作线程池任务?