javascript - 无法让我看似简单的 js 提交表单功能在 wordpress 上工作
问题描述
我一直在网上关注一些关于如何做到这一点的教程,但我不知道我在哪里错过了标记......当我按下提交按钮时,它除了重新加载页面之外什么也没做。尽管在 chrome 的控制台中加载我的 js 时我没有看到任何错误,所以我认为这可能是我的问题。但仍然不确定。
基本上,人们可以billing_address
在他们的仪表板上提供一个新的,并且 与 和相关billing address
联。user
sku
这是我的表单,包含三个项目(用户、sku、地址);
$loop = new WP_Query( $args );
echo '<form id="addressform" method = "post">';
echo '<br><select id="sku" name="sku" required >';
echo '<option value="empty">-- Select Coin--</option>';
while ( $loop->have_posts() ) : $loop->the_post();
global $product;
echo '<option value=' . $product->get_sku() . '>' . $product->get_sku() . ' </option>';
endwhile;
echo '</select>';
echo '<input type="text" placeholder="Insert new address here" id="address" name="address" size="40" required />';
echo '<input type="hidden" id="userid" name="userid" value="' . $userid . '">';
echo '<input type="submit" id="submit" name="submit" value="Submit">';
echo '</form>';
echo '<div class="alert alert-danger display-error" style="display: none"></div>';
这是我的javascript文件,称为address_submit.js
jQuery(document).ready(function($) {
jQuery('form#addressform').on('submit', function(e){{
jQuery.ajax({
type: 'POST',
dataType: 'json',
url: submitaddress_ajax_obj.ajaxurl,
data: {
'userid' : jQuery('form#addressform #userid').val(),
'sku' : jQuery('form#addressform #sku').val(),
'address' : jQuery('form#addressform #address').val(),
'action' : 'submitaddress'
},
success : function(data){
if (data.code == "200"){
alert("Success: " +data.msg);
} else {
jQuery(".display-error").html("<ul>"+data.msg+"</ul>");
jQuery(".display-error").css("display","block");
}
}
});
e.preventDefault();
});
});
最后,我知道我需要将它添加到我functions.php
的子主题中,所以我创建了第二个文件(address_verifier.php)并将其包含在我的主题中functions.php
:
require_once( __DIR__ . '/include/address_verifier.php');
最后,这是address_verifier.php
function submitaddress_ajax_enqueue() {
// Enqueue javascript on the frontend.
wp_register_script('submitaddress-ajax-script', get_stylesheet_directory_uri() . '/js/address_submit.js', array('jquery') );
wp_enqueue_script('submitaddress-ajax-script');
// The wp_localize_script allows us to output the ajax_url path for our script to use.
wp_localize_script('submitaddress-ajax-script','submitaddress_ajax_obj',array( 'ajaxurl' => admin_url( 'admin-ajax.php' ),'loadingmessage' => __('Submitting Address...') ));
}
add_action( 'wp_enqueue_scripts', 'submitaddress_ajax_enqueue' );
add_action( 'wp_ajax_submitaddress', 'submitaddress' );
add_action( 'wp_ajax_nopriv_submitaddress', 'submitaddress' );
function submitaddress() {
global $woocommerce,$wpdb,$product;
$errorMSG = [];
//check if data is present
$user = $_POST['userid'];
//check sku selected
if (empty($_POST['sku'])) {
$errorMSG .= "<li>Please select a product.</li>";
} else {
$sku = $_POST['sku'];
}
//check address input
if (empty($_POST['address'])) {
$errorMSG .= "<li>Please enter an address.</li>";
} else {
$address = $_POST['address'];
}
if(empty($errorMSG)){
$updateaddress = $wpdb->query( $wpdb->prepare("REPLACE INTO ".$wpdb->prefix."newaddress (user, sku, address) VALUES (%d, %s, %s)", $user, $sku, $address ) );
$msg = "<strong> <i class='fa fa-check' aria-hidden='true'></i> Your <font color='red'>" . $sku . " </font>address has been updated. </strong>";
echo json_encode(['code'=>200, 'msg'=>$msg]);
die;
}
echo json_encode(['code'=>404, 'msg'=>$errorMSG]);
die();
}
解决方案
移动e.preventDefault();
到函数的顶部。
推荐阅读
- netflix-zuul - `zuul.ignored-services` 的有效模式
- javascript - Cypress.io:无论如何要测试特定的滚动量?
- angular - AOT 编译 Angular 5 应用程序时出现无效属性名称警告
- python - 在python中组合2个列表列表
- php - 如何使用 Yii 中带有 ID 列表的字段中的 ID 从数据库表中获取所有行?
- javascript - 如何更新OL4中的概览控件?
- javascript - 自定义 HTML src 属性中的 GTM 变量
- swift - 如何将 Swift 中的数据从 NSArray 转换为 Dictionary?
- database - 如何在 Oracle 数据库中添加默认空值
- qt - 如何更新 Qt 维护工具