Plugin-Formular Übergeben an admin-ajax.php statt admin-post.php

Ich baue ein Plugin, das beim Anklicken ein Formular in eine Tabellenzelle lädt.

Hier ist der AJAX:

public static function cp_libhours_ajax(){ ?>  jQuery(document).ready(function(){ jQuery('.libhours-row a').click(function(e){ e.preventDefault(); //don't let the link click through //this is the cell in which the form will be placed var cellToReplace = jQuery(this).parent('td').prop('className'); //extract the values of the parameters passed in the URL var querystring = jQuery(this).prop('href').split("?")[1]; var values = querystring.split("&"); var count = 0; var param = []; jQuery(values).each(function(index, element) { param[count] = element.split("=")[1]; count++; }); //data object to be passed to the ajac function var data = { 'action': 'cp_libhours_ajax', 'semester': param[0], 'day_of_week': param[1] }; // since 2.8 ajaxurl is always defined in the admin header and points to admin-ajax.php jQuery.post(ajaxurl, data, function(response) { jQuery('.' + cellToReplace).html(response); }); }); });  

Hier ist die Antwort, die von der Callback-function generiert wird:

 /** * CALLED VIA AJAX! * * within public static function cp_libhours_ajax() */ public static function cp_libhours_ajax_callback() { global $wpdb; // this is how you get access to the database $semester = $_POST['semester']; $day_of_week = $_POST['day_of_week']; $output = ' 
'.wp_nonce_field('cp_libhours_pest_control','cp_libhours_pest_control_field').'

24-HR Closed

'; echo $output; wp_die(); // this is required to terminate immediately and return a proper response }

Das Formular wird auf der Seite angezeigt. Wenn es jedoch Zeit für die Übermittlung ist, wird das Formular nicht an den angegebenen Link im action-Tag (admin-post.php), sondern an admin-ajax.php weitergeleitet. Ich bekomme eine weiße Seite mit einer ‘0’.

Solutions Collecting From Web of "Plugin-Formular Übergeben an admin-ajax.php statt admin-post.php"

Dies geschieht, weil Sie in Ihrer Ajax-Anfrage eine andere URL angeben, als Sie im Formular verwenden.

 Query.post(ajaxurl, data, function(response) { 

Sie zeigen es nicht im Code-Snippet, aber ajaxurl wird normalerweise als {site url}\wp-admin\admin-ajax.php .

versuche, eine return false; hinzuzufügen return false; nach dem Ajax-Ruf. so was:

  jQuery.post(ajaxurl, data, function(response) { jQuery('.' + cellToReplace).html(response); }); return false; }); 

Auf diese Weise wird der Ajax nur einmal aufgerufen.