2013-04-29 4 views
9

Ich benutze dieses Jquery-Ajax-Skript E-Mail senden:Dateipfad für AJAX-Skript (in Wordpress)

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

in url ich die PHP-Datei aufrufen, die E-Mail sendet, aber es Ajax nur, wenn ich die angeben vollständiger Pfad:

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

aber ich habe eine Syntax wie folgt verwenden:

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

oder eine Variable i zu erklären n der HTML-Header/Footer

Html

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

Script

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

aber mit den beiden oben genannten Fällen die Browserkonsole ruft diesen Fehler:

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

W Hier liege ich falsch?

+0

Haben Sie versucht, zu ersetzen: 'url: "templates/process.php",'? – jtheman

+0

Was ist falsch bei der Angabe des vollständigen Pfads? – Musa

+0

@jtheman: mit Ihrer Lösung ruft es diesen Fehler 'POST http://www.domain.com/contact-page/templates/form-contat-mail.php 404 Not Found 1.34s' –

Antwort

20

Das ist nicht die Art, Ajax in WordPress zu implementieren. Alle Ajax-Anfragen sollten an admin-ajax.php gerichtet werden.

in Ihrer Vorlage-Datei:

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

In Ihrem 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'); 

über Ajax in Plugins lesen.

+0

Ich wusste das nicht. Ich werde lesen, aber ich entwickle kein Plugin! Es ist ein einfaches Kontaktformular. Oder muss ich diesen Weg immer benutzen, wenn ich Ajax benutze? –

+0

Versuchte Ihren Code und ich erhalte einen Fehler: 'ReferenceError: sendmail ist nicht definiert - action: sendmail,' und es lädt die Seite neu –

+0

Ich habe vergessen, Zitate darum herum zu setzen. Aktualisierung meiner Antwort! – RRikesh

0

Ich würde Ihnen empfohlen, System wie Registry zu verwenden, um alle "globalen" Werte an einem Ort zu speichern.

Registry design pattern

Es ist meine kleine jQuery-Plugin, wenn dies für Sie möglicherweise interessant. GitHub rep

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

und den Wert aus der Registrierung erhalten Sie $ .Registry.get ('urlMail') verwenden müssen;

+0

danke, aber ich würde lieber kein Plugin nur dafür verwenden. Außerdem verwende ich diese "variable Methode" bereits mit einem anderen Skript und es funktioniert. Ich verstehe nicht, warum das nicht funktioniert! –

0

Ich habe von RRikesh mit dem Code versehen gelöst aber

data: data 

mit

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

verwenden Sie sollten wirklich @ RRikeshs Antwort die richtige Antwort gemacht haben, da diese Antwort eine zusätzliche Korrektur zu Ihrem Ajax-Aufruf und nicht die ursprüngliche Frage bezieht sich auf den Dateipfad bezieht, und was er oben beantwortet hat. Ich weiß, es klingt wählerisch, aber die grüne Zecke ist der Ort, an dem die Leute nach der Antwort auf die gestellte Frage suchen. – happilyUnStuck

+1

Ich korrigierte RRikeshs Antwort, um es richtig zu machen, da es am höchsten bewertet ist. Ich denke, das sollte eigentlich der Kurs sein, da es die richtige Antwort ist und nur eine kleine Bearbeitung benötigt. – Jake