문제
AJAX 호출은 지속적으로 출력으로 '0'을 생성하고, 개발자는 의아해했습니다. function.php 파일에는 다음 코드가 포함되어 있습니다.
<code class="php">function get_data() { $abc = '1'; $result = $wpdb->get_results("SELECT * FROM " . $wpdb->options . " WHERE option_name LIKE '_transient_%'"); echo $result; // Outputting this value but still displays 0 wp_die(); } add_action('wp_ajax_nopriv_get_data', 'get_data'); add_action('wp_ajax_get_data', 'get_data');</code>
한편 AJAX 호출은 JavaScript를 통해 이루어집니다.
<code class="javascript">$('body').on("click", ".re-reset-btn", function(e) { var panel = $('#re-compare-bar'); $.ajax({ type : "GET", dataType : "json", url : "/wp-admin/admin-ajax.php", data : {action: "get_data"}, success: function(response) { alert("Your vote could not be added"); alert(response); } }); $("#re-compare-bar-tabs div").remove(); $('.re-compare-icon-toggle .re-compare-notice').text(0); });</code>
$abc 변수를 출력하려는 시도에도 불구하고 결과는 '0'으로 유지됩니다.
해결책
WordPress에서는 AJAX 호출에 대해 전역 변수 ajaxurl이 기본적으로 제공됩니다. 그러나 이 변수는 프런트엔드에 정의되어 있지 않습니다. 프런트엔드에서 AJAX 호출을 활용하려면 ajaxurl을 수동으로 정의해야 합니다.
wp_localize_script를 사용하는 것이 좋습니다. AJAX 호출이 "my-ajax-script.js"에 있다고 생각하고 다음과 같이 wp_localize_script를 추가하세요.
<code class="php">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' );</code>
JS 파일이 현지화되면 JS 파일의 my_ajax_object 개체에 액세스하여 수정할 수 있습니다. 그에 따라 AJAX 호출:
<code class="javascript">jQuery.ajax({ type: "post", dataType: "json", url: my_ajax_object.ajax_url, data: formData, success: function(msg){ console.log(msg); } });</code>
위 내용은 PHP 함수에 echo 문이 있음에도 불구하고 WordPress AJAX 호출이 \'0\'을 반환하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!