2013-04-29 17 views
9

Io uso questo script jquery-ajax per inviare e-mail:percorso del file per lo script AJAX (in Wordpress)

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

in url io chiamo il file php che invia email, ma ajax farlo solo se a specificare la il percorso completo:

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

ma devo usare una sintassi simile a questo:

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

o utilizzando una variabile di dichiarare i n Script html intestazione/piè di pagina

Html

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

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

ma con entrambi i casi suddetti la console del browser recupera questo errore:

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

W qui mi sbaglio?

+0

Hai provato: 'url: "templates/process.php",'? – jtheman

+0

Cosa c'è di sbagliato nel specificare il percorso completo? – Musa

+0

@jtheman: con la tua soluzione recupera questo errore 'POST http://www.domain.com/contact-page/templates/form-contatti-mail.php 404 non trovato 1.34s' –

risposta

20

Questo non è il modo di implementare ajax in wordpress. Tutte le richieste Ajax devono essere fatte a admin-ajax.php.

Nel file template:

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

Nei tuoi js:

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

in 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'); 

Leggi Ajax in Plugins.

+0

Non lo sapevo. Leggerò, ma non sto sviluppando un plugin! è un semplice modulo di contatto. o devo usare in questo modo ogni volta che uso Ajax? –

+0

Ho provato il tuo codice e ho ricevuto un errore: 'ReferenceError: sendmail non è definito - action: sendmail,' e ricarica la pagina –

+0

Ho dimenticato di mettere le virgolette intorno. Aggiornamento della mia risposta! – RRikesh

0

Sarebbe consigliabile utilizzare un sistema come Registro di sistema per salvare tutti i valori "globali" in un'unica posizione.

Registry design pattern

c'è la mia piccola plugin per jQuery se questo è può essere interessante per voi. GitHub rep

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

e per ottenere valore dal Registro di sistema è necessario utilizzare $ .Registry.get ('urlMail');

+0

grazie ma preferirei non usare un plugin solo per quello. inoltre sto già usando quel "metodo variabile" con un altro script e funziona. Non capisco perché non funzioni per questo! –

0

Ho risolto utilizzando il codice fornito da RRikesh ma sostituendo

data: data 

con

data: data + '&action=sendmail' 
+3

Dovresti aver fatto in modo che la risposta corretta di @ RRikesh risponda alla risposta corretta, poiché questa risposta si riferisce a una correzione aggiuntiva alla tua chiamata ajax e non alla domanda originale relativa al percorso del file, e che ha risposto sopra. So che sembra pignolo, ma il segno di spunta verde è dove le persone vanno a cercare la risposta alla domanda posta. – happilyUnStuck

+1

Ho modificato la risposta di RRikesh per correggerla, poiché è la più votata. Penso che questo dovrebbe essere stato il corso in primo luogo in quanto è la risposta corretta e solo bisogno di una piccola modifica. – Jake

Problemi correlati