Wordpress - 在插件中调用Ajax URL

时间:2015-06-18 11:52:43

标签: php jquery ajax wordpress

插件类文件:

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,我将其更改为ajaxurl,其形式如下所示

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

This也没有帮助。

如何调用get_product_serial_callback函数以获取JSON值并在function(data)中设置这些值?

2 个答案:

答案 0 :(得分:0)

检查此代码

在sepearate js中添加此load_product功能并加载它。

 function load_product(){
         jQuery.ajax({
          type: "GET", 

          url: ajaxurl,
          dataType : "JSON",
          data : {action: "get_product_serial_callback"},
          //cache: false, 
          success: function(data){
            alert('Eureka');
          }
        });
    }

已编辑的代码

    function __construct()
        {
          add_shortcode('user_registration_form', array(
            $this,
            'shortcode'
          ));
          $this->hook();
        }
        public function hook()
        {

          add_action('wp_ajax_get_product_serial', array( $this,'get_product_serial_callback'));
          add_action('wp_ajax_nopriv_get_product_serial',array( $this,'get_product_serial_callback') );
           add_action( 'init',array( $this, 'my_script_enqueuer') );
        }




            function my_script_enqueuer() {

wp_localize_script('more_script', 'myAjax', array('ajaxurl' => admin_url('admin-ajax.php')));
             wp_register_script('more_script', plugins_url('bootstrap/js/product-serial.js', __FILE__),array('jquery'));

             wp_enqueue_script('more_script');

            }
                    public function product_serial_ajax()
                    { ?>
                     <script type="text/javascript">

                        load_product();

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

答案 1 :(得分:0)

插件类文件:

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(){
     var result="";
     jQuery.ajax({
      type: "GET", 
      url: ajaxurl,
      async: false,
      dataType : "JSON",
      contentType: 'application/json; charset=utf-8',
      data : {action: "get_product_serial"},
      //cache: false, 
      success: function(data){
          result = data;
          return result;
      },
      error: function() {
        alert('Unexpected error occured. Please try again.');
    }
    });

}

P.S:将以下内容放在我主题的header.php中为我工作

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