Plugin-Klassendatei auf:
function __construct() { add_shortcode("user_registration_form", array($this, "shortcode")); } public function hook(){ add_action( "wp_ajax_get_product_serial_callback", "get_product_serial_callback" ); add_action( "wp_ajax_nopriv_get_product_serial_callback", "get_product_serial_callback" ); } public function product_serial_ajax() { ?> <script type="text/javascript"> jQuery(document).ready(function(){ alert("Hello World!"); jQuery.ajax({ type: "GET", url: "<?php echo admin_url("admin-ajax.php"); ?>", //url: ajaxurl, dataType : "JSON", data : {action: "get_product_serial_callback"}, //cache: false, success: function(data){ alert("Eureka")"; } }); }); </script><?php } function csv_to_array($filename="", $delimiter=",") { //if(!file_exists($filename) || !is_readable($filename)) //return FALSE; $header = NULL; $data = array(); if (($handle = fopen($filename, "r")) !== FALSE) { while (($row = fgetcsv($handle, 1024, $delimiter)) !== FALSE) { if(!$header) $header = $row; else $data[] = array_combine($header, $row); } fclose($handle); } return $data; } function get_product_serial_callback(){ $upload_dir = wp_upload_dir(); $csvFile = $upload_dir["baseurl"]."/Eragon-Serial.csv"; $csv = $this->csv_to_array($csvFile); //read csv foreach ($csv as $serialnum){ $serial_num_array[] = $serialnum["product_serial"]; } $json_array = json_encode($serial_num_array); echo $json_array; die(); } function shortcode() { $this->product_serial_ajax();//fetch product serial number }
Wenn jedoch ajaxurl
nicht definiert ist, habe ich es geändert ajaxurl
die sich unter der folgenden URL bildet
http://example.com/wp-admin/admin-ajax.php?action=get_product_serial_callback
Auch dies hat nicht geholfen .
Wie kann ich die Funktion get_product_serial_callback
aufrufen, um die JSON
-Werte abzurufen und diese Werte in function(data)
?
Kommentare
- Wird die Hook-Methode aufgerufen? Außerdem sollte der Rückruf
array($this, 'get_product_serial_callback')
sein, wie im Anser erwähnt. - Wie überprüfe ich, ob er aufgerufen wird? und änderte den Rückruf wie erwähnt. Trotzdem heißt es
ajaxurl is not defined
- Haben Sie die Hook-Funktion in init aufgerufen? Wenn nicht, rufen Sie diese Funktion bitte in der Init-Aktion auf.
Antwort
Geben Sie den folgenden Code in die Funktion _construct () und ein Ändern Sie den Aktionsnamen in get_product_serial_callback: –
add_action( "wp_ajax_get_product_serial_callback", array($this,"get_product_serial_callback") ); add_action( "wp_ajax_nopriv_get_product_serial_callback", array($this,"get_product_serial_callback" ));
Kommentare
- Frage aktualisiert. Es ruft immer noch nicht einmal die Funktion auf und gibt als Antwort 0 zurück.
- add public to function get_product_serial_callback ().
- ZB: public function get_product_serial_callback ()
- WisdmLabs : Wie erhalte ich eine JSON-Datenantwort auf die Funktion
product_serial_ajax
? Das Ajaxurl, das ich als Antwort sehe, isthttp://example.com/wp-admin/admin-ajax.php?action=get_product_serial
- Sie müssen nur add_action mit dem Aktionsnamen ' wp_ajax_get_product_serial ' und rufen Sie Ihre oben definierte Funktion auf.
Antwort
Plugin-Klassendatei:
function __construct() { add_shortcode("user_registration_form", array($this, "shortcode")); wp_register_script("product-serial", plugins_url("bootstrap/js/product-serial.js", __FILE__),array("jquery")); //custom jquery for product serial wp_enqueue_script( "product-serial" ); //custom jquery for product serial $this->hook(); } public function hook() { add_action("wp_ajax_get_product_serial", array( $this,"get_product_serial")); add_action("wp_ajax_nopriv_get_product_serial",array( $this,"get_product_serial") ); } public function product_serial_ajax(){ ?> <script type="text/javascript">load_product();</script> <?php } //convert csv data into array function csv_to_array($filename="", $delimiter=",") { //if(!file_exists($filename) || !is_readable($filename)) //return FALSE; $header = NULL; $data = array(); if (($handle = fopen($filename, "r")) !== FALSE) { while (($row = fgetcsv($handle, 1024, $delimiter)) !== FALSE) { if(!$header) $header = $row; else $data[] = array_combine($header, $row); } fclose($handle); } return $data; } //get product serial number function get_product_serial(){ $upload_dir = wp_upload_dir(); $csvFile = $upload_dir["baseurl"]."/Eragon-Serial.csv"; $csv = $this->csv_to_array($csvFile); //read csv foreach ($csv as $serialnum){ $serial_num_array[] = $serialnum["product_serial"]; } $json_array = json_encode($serial_num_array); echo $json_array; die(); } function shortcode() { $this->product_serial_ajax(); //fetch product serial number }
Separate JS-Datei
function load_product(){ jQuery.ajax({ type: "GET", url: ajaxurl, dataType : "JSON", data : {action: "get_product_serial"}, //cache: false, success: function(data){ alert("Eureka"); } }); }
PS: Folgendes in die header.php meines Themas einzufügen hat für mich funktioniert
<script type="text/javascript"> var ajaxurl = "<?php echo admin_url("admin-ajax.php"); ?>"; </script>