Apelare URL Ajax în Plugin

18 iun. 2015, 14:53:48
Vizualizări: 18.1K
Voturi: 0

Fișierul Clasei Plugin:

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); //citire 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();//preia numărul de serie al produsului
}

Totuși, când întâlnesc ajaxurl nedefinit, l-am înlocuit cu ajaxurl care formează URL-ul de mai jos

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

Acest lucru nu a ajutat nici el.

Cum pot apela funcția get_product_serial_callback pentru a prelua valorile JSON și pentru a seta aceste valori în function(data)?

3
Comentarii

Este apelată metoda hook? De asemenea, callback-ul ar trebui să fie array($this, 'get_product_serial_callback') cum este menționat în răspuns.

giraff giraff
18 iun. 2015 15:34:00

Cum pot verifica dacă este apelată? Am schimbat callback-ul cum ai menționat. Totuși, primesc mesajul ajaxurl is not defined

Slimshadddyyy Slimshadddyyy
18 iun. 2015 15:42:59

Ai apelat funcția hook în init? Dacă nu, te rog apelează acea funcție în acțiunea init

Mitul Mitul
18 iun. 2015 16:43:53
Toate răspunsurile la întrebare 2
6

Pune codul de mai jos în funcția _construct() și schimbă numele acțiunii în 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' ));
18 iun. 2015 15:09:23
Comentarii

Întrebarea a fost actualizată. Încă nu apelează funcția și returnează 0 ca răspuns

Slimshadddyyy Slimshadddyyy
18 iun. 2015 15:20:00

Adaugă public la funcția get_product_serial_callback().

Domain Domain
18 iun. 2015 15:59:00

Exemplu: public function get_product_serial_callback()

Domain Domain
18 iun. 2015 15:59:14

WisdmLabs: Cum obțin un răspuns JSON în funcția product_serial_ajax? URL-ul AJAX pe care îl văd în răspuns este http://example.com/wp-admin/admin-ajax.php?action=get_product_serial

Slimshadddyyy Slimshadddyyy
19 iun. 2015 08:32:00

Trebuie doar să folosești add_action cu numele acțiunii ca 'wp_ajax_get_product_serial' și să apelezi funcția definită mai sus.

Domain Domain
19 iun. 2015 13:03:51

Și dacă acea acțiune este definită într-un fișier ajax prod-serial.php și nu în fișierul plugin-ului în sine?

Slimshadddyyy Slimshadddyyy
19 iun. 2015 13:22:56
Arată celelalte 1 comentarii
0

Fișier Clasă Plugin:

function __construct()
    {
        // Adaugă shortcode pentru formularul de înregistrare utilizator
        add_shortcode('user_registration_form', array($this, 'shortcode'));
        wp_register_script('product-serial', plugins_url('bootstrap/js/product-serial.js', __FILE__),array('jquery')); //jquery personalizat pentru seria produsului  
        wp_enqueue_script( 'product-serial' ); //jquery personalizat pentru seria produsului

        $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
    }

    //convertește datele CSV în 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;
    }

    //obține seria produsului
    function get_product_serial(){

        $upload_dir = wp_upload_dir();
        $csvFile = $upload_dir['baseurl'].'/Eragon-Serial.csv';
        $csv = $this->csv_to_array($csvFile); //citește 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(); //preia numărul serial al produsului
    }

Fișier JS separat

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

P.S: adăugarea următorului cod în header.php al temei mele a funcționat

<script type="text/javascript">
    var ajaxurl = "<?php echo admin_url('admin-ajax.php'); ?>";
    </script>
18 iun. 2015 16:24:25