File path for AJAX script (in WordPress)

I use this jquery-ajax script to send email:

    $.ajax({
        url: process.php,    
        type: "POST",
        data: data,        
        cache: false,
    ...

in url I call the php file that sends email, but ajax get it only if I specify the full path:

Read More
url: "http://www.domain.com/wp-content/themes/site_theme/templates/process.php",

but I have to use a syntax like this:

url: "../../templates/process.php",

or using a variable to declare in the html header/footer

Html

<script type="text/javascript">
  var urlMail = '<?php bloginfo('template_url'); ?>/templates/process.php';
</script>

Script

url: "../../templates/process.php",

but with both the above cases the browser console retrieves this error:

POST http://www.domain.com/templates/process.php 404 Not Found 1.56s

Where am I wrong?

Related posts

Leave a Reply

3 comments

  1. That’s not the way to implement ajax in wordpress. All ajax request should be made to admin-ajax.php.

    In your template file:

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

    In your js:

    $.ajax({
            url: ajaxurl,    
            type: "POST",
            cache: false,
            data: data + '&action=sendmail' //action defines which function to use in add_action
    });
    

    in your functions.php:

    function send_my_mail(){
    #do your stuff
    }
    
    add_action('wp_ajax_sendmail', 'send_my_mail');
    add_action('wp_ajax_nopriv_sendmail', 'send_my_mail');
    

    Read about Ajax in Plugins.

  2. I would be recommended to you use system like Registry for save all “global” values in a one place.

    Registry design pattern

    There is my small jQuery plugin if this is may be interesting to you. GitHub rep

    <script type="text/javascript">
        $.Registry.set('urlMail', '<?php get_bloginfo('template_url'); ?>/templates/process.php';
    </script>
    

    And to get value from the Registry you must use $.Registry.get(‘urlMail’);