Próbuję utworzyć ajaxform na przedniej stronie. Używam kodu
jQuery.ajax(
{
type: "post",
dataType: "json",
url: ajaxurl,
data: formData,
success: function(msg){
console.log(msg);
}
});
za co dostaję błąd
Uncaught ReferenceError: ajaxurl is not definedworklorAjaxBookForm @
?page_id=2:291onclick @ ?page_id=2:202
Podczas korzystania z podobnego kodu na zapleczu administratora działa. Jakiego adresu URL muszę użyć do przetworzenia żądania ajax?
plugin-development
theme-development
ajax
jquery
wp-enqueue-script
dread_cat_pirate
źródło
źródło
Odpowiedzi:
W backendie znajduje się
ajaxurl
zmienna globalna zdefiniowana przez sam WordPress.Ta zmienna nie jest tworzona przez WP w interfejsie użytkownika. Oznacza to, że jeśli chcesz używać wywołań AJAX w interfejsie użytkownika, musisz samodzielnie zdefiniować taką zmienną.
Dobrym sposobem na to jest użycie
wp_localize_script
.Załóżmy, że twoje wywołania AJAX są w
my-ajax-script.js
pliku, a następnie dodaj wp_localize_script do tego pliku JS w następujący sposób:Po zlokalizowaniu pliku JS możesz użyć
my_ajax_object
obiektu w pliku JS:źródło
wp_localize_script
bez konieczności używaniawp_enqueue_scritp
?aby użyć ajaxurl bezpośrednio, w pliku wtyczki dodaj to:
możesz wtedy użyć polecenia
ajaxurl
ajax.źródło
ajaxurl
podobna do domyślnej. Co jest znacznie lepsze niż zaakceptowana odpowiedź.ajaxurl
jest nadal dostępny w*.js
pliku. Aby to zrobić, może być konieczne zadeklarowanieajaxurl
zmiennej na początku ładowania strony. Inną rzeczą do rozważenia jest wywołanie*.js
twojego zewnętrznego pliku. Plik zewnętrzny powinien być nazywany POajaxurl
została instancja i mieć odpowiednią wartość URL.