프론트 엔드에 정의되지 않은 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.