如何防止在提交表单时加载页面

时间:2017-02-09 作者:Himanshu

我终于设法让我的插件工作了。但是,在提交后,整个页面将与我的输出一起重新加载到表单上方。如何避免页面完全重新加载,并且在提交表单后不显示表单?

<?php    
function installer(){
    include(\'installer.php\');
}
register_activation_hook( __file__, \'installer\' ); //executes installer php when installing plugin to create new database

add_action(\'admin_menu\',\'result_menu\'); //wordpress admin menu creation

function result_menu()
{
    add_menu_page(\'Result\',\'Result\',\'administrator\',\'xenon-result\');
    add_submenu_page( \'xenon-result\', \'Manage Marks\', \' Manage Marks\', \'administrator\', \'Manage-Xenon-Marks\', \'Xenon_Marks\' );
}

function Xenon_Marks() //function to add marks addition form in admin view
{
    include(\'new/result-add-marks.php\');
}

function html_form_code() 
{
echo \'<form action="" method="post">\';
echo \'<fieldset>\';
echo \'<legend>Student Information</legend>\';
echo \'Roll Number: <input type="number" min="170001" max="171000" name="rollNumber"><br>\';
echo \'<input type="submit">\';
echo \'<input type ="reset">\';
echo \'</form>\';
}

function result_display(){
global $wpdb;
$student_id = $_POST[\'rollNumber\'];
$query = "SELECT * FROM `wp_xenonresult` WHERE `student_id` = $student_id";
$result = $wpdb->get_row($query);
echo $result->student_name;
}

if(isset($_POST[\'submit\']))
{
   result_display();
}

function display_shortcode() {
    ob_start();
    result_display();
    html_form_code();
    return ob_get_clean();
}

add_shortcode( \'xenon_result_display\', \'display_shortcode\' );
// Enable shortcodes in text widgets
add_filter(\'widget_text\',\'do_shortcode\');

2 个回复
SO网友:Milos

除非您使用AJAX发送/获取数据,否则必须允许重新加载整个页面。

SO网友:mrben522

正如losmi所说,您需要使用AJAX来避免页面重新加载。如果您使用的是jQuery,则应该执行以下操作:

$("form").on("submit", function(event) {
  var data = $(this).serialize());
  $.ajax({
    type: "POST",
    url: /path/to/admin-ajax.php,
    data: data,
    action: something_descriptive
  })
  event.preventDefault();
});
编辑:马克提出了一个公平的观点。在wordpress中,AJAX调用应该由wordpress处理。您可以通过使用下面的命名样式向ajax处理程序过滤器添加一个函数来实现这一点

add_filter(\'wp_ajax_something_descriptive\', \'your_ajax_handler\');
add_filter(\'wp_ajax_nopriv_something_descriptive\', \'your_ajax_handler\');
function your_ajax_handler() {
    /*do your form handling here, anything passed in the data object will be 
    available as a $_POST variable.  TO return content to the AJAX call echo it out.  
    Be sure to die() at the end of the function*/
}
在AJAX调用中传递的操作将成为过滤器名称的一部分wp_ajax_ACTION 和登录用户,以及wp_ajax_nopriv_ACTION 对于未登录的用户。在野外,请比我在jQuery目标中更具体,在操作它们之前,始终检查以确保事物存在,并使函数和操作名称符合逻辑。

相关推荐

无法在模板函数.php中使用IS_HOME

我试图在标题中加载一个滑块,但只在主页上加载。如果有帮助的话,我正在使用Ultralight模板。我正在尝试(在template functions.php中)执行以下操作:<?php if ( is_page( \'home\' ) ) : ?> dynamic_sidebar( \'Homepage Widget\' ); <?php endif; ?> 但这行不通。现在,通过快速的google,我似乎需要将请