프론트 엔드에 정의되지 않은 ajaxurl


25

앞면에 아약스 폼을 만들려고합니다. 코드를 사용하고 있습니다

    jQuery.ajax(
        {
            type: "post",
            dataType: "json",
            url: ajaxurl,
            data: formData,
            success: function(msg){
                console.log(msg);
            }
        });

내가 오류가 발생했습니다.

Uncaught ReferenceError: ajaxurl is not definedworklorAjaxBookForm @ 
?page_id=2:291onclick @ ?page_id=2:202

관리자 백엔드에서 유사한 코드를 사용하는 동안 작동합니다. ajax 요청을 처리하려면 어떤 URL을 사용해야합니까?


이 튜토리얼을 확인하십시오. 도움이 될 수 있습니다. 1stwebdesigner.com/implement-ajax-wordpress-themes
— Nilambar

답변:


48

백엔드에는 ajaxurlWordPress 자체에 의해 정의 된 전역 변수 가 있습니다.

이 변수는 프론트 엔드에서 WP에 의해 작성되지 않습니다. 프론트 엔드에서 AJAX 호출을 사용하려면 이러한 변수를 직접 정의해야합니다.

이 작업을 수행하는 좋은 방법은을 사용하는 것 wp_localize_script입니다.

AJAX 호출이 my-ajax-script.js파일에 있다고 가정 하고 다음과 같이이 JS 파일에 wp_localize_script를 추가하십시오.

function my_enqueue() {

    wp_enqueue_script( 'ajax-script', get_template_directory_uri() . '/js/my-ajax-script.js', array('jquery') );

    wp_localize_script( 'ajax-script', 'my_ajax_object',
            array( 'ajax_url' => admin_url( 'admin-ajax.php' ) ) );
}
add_action( 'wp_enqueue_scripts', 'my_enqueue' );

JS 파일을 현지화 한 후 JS 파일에서 my_ajax_object객체를 사용할 수 있습니다 .

jQuery.ajax(
    {
        type: "post",
        dataType: "json",
        url: my_ajax_object.ajax_url,
        data: formData,
        success: function(msg){
            console.log(msg);
        }
    });

2
사용 wp_localize_script하지 않고 사용할 수 wp_enqueue_scritp있습니까?
— dread_cat_pirate

1
wp_localize_script에서 스크립트 핸들을 사용하므로 하나 이상의 스크립트에 wp_enqueue_script를 사용해야합니다. 그러나 ... wp_enqueue_script를 사용하지 않는 것은 좋은 생각이 아닙니다 (일부 충돌 및 종속성 문제의 위험이 있음).
— Krzysiek Dróżdż

로드 할 외부 스크립트가 없으며 ajaxurl을 사용하여 ajax 호출을 원합니다. 가능하지 않습니까?
— RT

이 AJAX 호출을 어디에 두겠습니까? 인라인 스크립트로? 그것은 매우 나쁜 생각입니다 ...
— Krzysiek Dróżdż

나는 유효성 검사를 관리하고 제출 할 때 후크를 추가하여 물론 워드 프레스 방식으로 양식을 제출하는 아약스 호출이라는 별도의 양식을 가지고 있습니다. 어쨌든 나는 ajaxurl을 사용하는 방법을 알아 냈습니다.
— RT

33

플러그인 파일에서 ajaxurl을 직접 사용하려면 다음을 추가하십시오.

add_action('wp_head', 'myplugin_ajaxurl');

function myplugin_ajaxurl() {

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

그런 다음 ajaxurlajax 요청에 사용할 수 있습니다 .


1
이 답변은 ajaxurl기본 사용법과 유사하게 만듭니다 . 허용되는 답변보다 훨씬 낫습니다.
— Abel Melquiades Callejo

사실이지만 .js 파일에서 사용하는 경우 쓸모가 없습니다.
— Jules

1
@Jules ajaxurl는 여전히 *.js파일 에서 사용할 수 있습니다 . 이렇게하려면 ajaxurl페이지로드 초기에 변수 를 선언해야 할 수 있습니다 . 고려해야 할 또 다른 사항은 외부 *.js파일을 호출 하는 것입니다. 외부 파일을 호출해야 후에 가 ajaxurl인스턴스화되고 오른쪽 URL 값을받을 수.
— Abel Melquiades Callejo
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.