title: Wordpress AJAX doesn't work - response 0
body: <p>I want add AJAX support to my plugin and I have huge problem with this simple thing. WordPress isn't permitting me to use normal AJAX and I need to use WordPress version.</p>
  
  <p>At all times, the WordPress function (that should generate output) returns 0. And I think that the reason is that WP doesn't trigger 'function'. I try to force the function to run many times, but I don't have any idea what I can improve.</p>
  
  <pre><code>&lt;?php
  public function widget( $args, $instance ) {
  
  $options = get_option('Free_Quotation_options');
  ?&gt;
  &lt;script type="text/javascript" &gt;
  
      jQuery(document).ready(function($) {        
          var ajaxurl = "&lt;?php echo admin_url('admin-ajax.php'); ?&gt;";
  
          jQuery.ajax({
              url: ajaxurl,
              type: 'POST',
              action: 'fqtag',
              data: {
                  'whatever': 'text'
              },
              success: function (output) {
                  $('#secondary').append(output);
              }       
          });
      });
  
  &lt;/script&gt; 
  &lt;?php
  add_action( 'wp_ajax_fqtag', 'fqtag' );
  add_action( 'wp_ajax_nopriv_fqtag', 'fqtag' );
  
  function fqtag() {
      global $wpdb; 
  
      echo 'echo';
  
      die(); 
  }
  }
  </code></pre>
  
  <p>I try to add alert('echo'); to the test function, but it doesn't have any effect. I think that AJAX doesn't run the proper function: fq_tag_support_callback() .</p>
  
  <p>On the beginning I had a problem with ajaxurl variable. It was not defined. It's not a normal situation. I attempt to resolve this problem by using: </p>
  
  <pre><code>var ajaxurl = "&lt;?php echo admin_url('admin-ajax.php'); ?&gt;";
  </code></pre>
  
  <p>Do you have any idea, how can I try to solve this problem?</p>
  
  <p>---EDIT--- After discussion with David I have file like this (all time doesn't work)</p>
  
  <pre><code>&lt;?php
  /*
      Plugin Name: TEST PLUGIN
      Description: TEST
      Author: Krzysztof Kubiak
      Version: 1.0
  */
  function Test_01_settings_init(){
      register_setting( 'Test_01_settings_filed', 'Test_01_options', 'Test_01_validate' );
  }
  add_action('admin_init', 'Test_01_settings_init' );
  
  function T01_init_method() {         
      wp_enqueue_script('jquery');      
  }   
  add_action('init', 'T01_init_method');
  
  function Test_01_menu_page(){
      add_menu_page( 'Test_01', 'Test_01', 'manage_options', 'T01_menu_page', 'T01_add_page' );
      echo my_test();
  }
  add_action('admin_menu', 'Test_01_menu_page');
  
  function my_test(){
      echo 'Function test';
  }
  function T01_add_page() {
      echo 'TEST_01_plugin';
  }
  
  function Test_01_validate($input) {
  }   
  
  //AJAX FROM HIRE
  
  function test_callback() {
      $whatever = 8;
      echo $whatever;
      die();
  }       
  add_action( 'wp_ajax_nopriv_fqtag', 'test_callback', 1 );
  add_action( 'wp_ajax_fqtag', 'test_callback', 1 );
  
  function print_js() { ?&gt;
      &lt;script type="text/javascript"&gt;
      jQuery.ajax({
          url: 'wp-admin/admin-ajax.php',
          type: 'POST',
          action: 'fqtag',
          data: {
              'whatever': 'text'
          },
          success: function (output) {
            alert(output);
          }       
      });
      &lt;/script&gt;
  &lt;?php
  }
  add_action('wp_print_footer_scripts', 'print_js', 1000);
  ?&gt;
  </code></pre>