我在“提交后”事件中使用Gravity Forms来调用functions.php
文件中的javascript函数。
涉及3个文件:frontend-checklist.php
,frontend-checklist.js
和functions.php
。
GF表格显示在灯箱中,一旦表格完成并按下提交按钮,GF偶数功能会从GF表格中提取特定字段并将其传递给javascript函数。
然后我正在配置Ajax调用以使用该信息插入/更新不同的数据库表。
一切似乎都有效,直到Ajax调用,它似乎永远不会调用php函数将数据写入数据库。
以下是functions.php
的代码:
add_action('gform_after_submission_5', 'GF_Submit_5', 10, 2);
function GF_Submit_5($entry, $form){
?>
<script>
var vcl_c = <?php echo json_encode($entry['19']); ?>;
frontend_checklist_fc_database_write(vcl_c );
</script>
<?php
}
上面的代码调用了一个javascript函数。这是函数:
function frontend_checklist_fc_database_write(fc_itemID) {
alert ("javascript - dbwrite" + fc_itemID);
var data = { action: 'fc_database_write', fc_itemID: fc_itemID };
jQuery.post(frontendChecklist.ajaxurl, data);
}
最后,这里是定义实际写入数据的Ajax调用的代码,以及action和enqueue的配置。此代码位于第三个文件中(在javascript代码和functions.php
文件之外)。
add_action('wp_ajax_fc_database_write', array('Frontend_Checklist', 'dbWriteAjax'));
add_action('wp_enqueue_scripts', array('Frontend_Checklist', 'add_js'));
function add_js() {
wp_enqueue_script('frontend-checklist', plugins_url('frontend-checklist.js', __FILE__), array('jquery'));
wp_localize_script( 'frontend-checklist', 'frontendChecklist',
array(
'ajaxurl' => admin_url( 'admin-ajax.php' ),
)
);
}
public static function dbWriteAjax() {
$user_ID = get_current_user_id();
if ($user_ID == 0) die;
$ca = (int)$_POST['fc_itemID'];
$fc_completed = "'on'";
$casql = $wpdb->prepare('SELECT completed from wp_fc_vendorlist WHERE fc_vendorID = ' .$user_ID. ' and fc_itemID = ' .$ca. ' ORDER BY fc_itemID ASC' );
$cachk = $wpdb->get_row($casql, ARRAY_A);
$table_name = 'wp_fc_vendorlist';
if($cachk =='') {
$wpdb->query($wpdb->prepare("INSERT INTO $table_name (fc_itemID, fc_vendorID, completed) VALUES ($ca, $user_ID, $fc_completed)"));
} else {
$wpdb->query($wpdb->prepare("UPDATE $table_name SET completed = $fc_completed WHERE fc_vendorID = $user_ID and fc_itemID = $ca"));
}
die;
}
javascript中的警报将触发,我可以使用firebug跟踪javascript代码,它似乎正在更新变量。错误: ReferenceError:未定义frontend_checklist_fc_database_write 在代码进入javascript函数后立即显示。
对此的任何帮助将不胜感激。