플러그인 클래스 파일에서 Ajax URL 호출 :

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 } 

하지만 ajaxurl가 정의되지 않은 경우 아래 URL의 형식

http://example.com/wp-admin/admin-ajax.php?action=get_product_serial_callback 

도 도움이되지 않았습니다. .

get_product_serial_callback 함수를 호출하여 JSON 값을 가져오고

?

설명

  • 훅 메서드가 호출됩니까? 또한 콜백은 anser에 언급 된대로 array($this, 'get_product_serial_callback')이어야합니다.
  • 호출되고 있는지 어떻게 확인합니까? 언급했듯이 콜백을 변경했습니다. 그래도 ajaxurl is not defined
  • init에서 후크 함수를 호출 했습니까? 그렇지 않은 경우 초기화 작업에서 해당 함수를 호출하십시오.

Answer

_construct () 함수에 코드를 입력하고 작업 이름을 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" )); 

댓글

  • 질문이 업데이트되었습니다. 여전히 함수를 호출하지 않고 응답으로 0을 반환합니다.
  • get_product_serial_callback () 함수에 public을 추가합니다.
  • 예 : public function get_product_serial_callback ()
  • WisdmLabs : product_serial_ajax 함수에 대한 json 데이터 응답을 얻으려면 어떻게해야합니까? 응답에서 보는 ajaxurl은 http://example.com/wp-admin/admin-ajax.php?action=get_product_serial
  • 입니다.

  • 작업 이름을 ' wp_ajax_get_product_serial ' 그리고 위에서 정의한 함수를 호출합니다.

Answer

플러그인 클래스 파일 :

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 } 

개별 JS 파일

 function load_product(){ jQuery.ajax({ type: "GET", url: ajaxurl, dataType : "JSON", data : {action: "get_product_serial"}, //cache: false, success: function(data){ alert("Eureka"); } }); } 

PS : 내 테마의 header.php에 다음을 입력하면 효과가있었습니다.

<script type="text/javascript"> var ajaxurl = "<?php echo admin_url("admin-ajax.php"); ?>"; </script> 

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다