2013-04-29 3 views
9

J'utilise ce script jquery-ajax envoyer email:Chemin du fichier pour le script AJAX (dans Wordpress)

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

dans url j'appelle le fichier php qui envoie un courrier électronique, mais ajax obtenir que si je précise la chemin complet:

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

mais je dois utiliser une syntaxe comme ceci:

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

ou en utilisant une variable de déclarer i n l'en-tête html/pied de page

Html

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

Script

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

mais avec les deux cas ci-dessus la console du navigateur récupère cette erreur:

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

W j'ai tort?

+0

Avez-vous essayé: 'url: "templates/process.php",'? – jtheman

+0

Quel est le problème avec la spécification du chemin complet? – Musa

+0

@jtheman: avec votre solution, il récupère cette erreur 'POST http://www.domain.com/contact-page/templates/form-contatti-mail.php 404 Not Found 1.34s' –

Répondre

20

Ce n'est pas la façon d'implémenter ajax dans wordpress. Toute requête ajax doit être faite à admin-ajax.php.

Dans votre fichier modèle:

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

Dans votre js:

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

dans votre 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'); 

En savoir plus sur Ajax in Plugins.

+0

Je ne le savais pas. Je vais lire, mais je ne développe pas de plugin! C'est un formulaire de contact simple. ou je dois utiliser de cette façon chaque fois que j'utilise ajax? –

+0

Essayé votre code et j'obtiens erreur: 'ReferenceError: sendmail n'est pas défini - action: sendmail,' et il recharge la page –

+0

J'ai oublié de mettre des citations autour d'elle. Mise à jour de ma réponse – RRikesh

0

Je vous recommande d'utiliser un système comme le registre pour enregistrer toutes les valeurs "globales" dans un seul endroit.

Registry design pattern

Il est mon petit plugin jQuery si cela est peut-être intéressant pour vous. GitHub rep

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

Et pour obtenir la valeur du Registre, vous devez utiliser .Registry.get $ ('urlMail');

+0

merci mais je préfère ne pas utiliser un plugin uniquement pour cela. d'ailleurs j'utilise déjà cette "méthode variable" avec un autre script et ça marche. Je ne comprends pas pourquoi ça ne marche pas pour ça! –

0

Je l'ai résolu en utilisant le code fourni par RRikesh mais en remplaçant

data: data 

avec

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

Vous devriez vraiment avoir fait de @ RRikesh répondre à la bonne réponse, puisque cette réponse concerne une correction supplémentaire à votre appel ajax et non la question originale qui se rapporte au chemin du fichier, et qu'il a répondu ci-dessus. Je sais que cela semble difficile, mais la tique verte est où les gens vont chercher la réponse à la question posée. – happilyUnStuck

+1

J'ai édité la réponse de RRikesh pour la corriger, car elle est la mieux notée. Je pense que cela aurait dû être le cours en premier lieu car c'est la bonne réponse et seulement besoin d'une petite modification. – Jake

Questions connexes