관리자 Ajax가 0을 반환합니다


28

특히 jQuery와 AJAX를 처음 사용합니다. 반환 값이 항상 0 인 작은 문제가 있지만 이것이 실제로 성공 메시지라고 생각하지만 아무것도 반환하지 않습니다.

Google 구절을 닦았 고 PHP 콜백에 die () 함수가 있으며 add_actions가 정확하다고 생각합니다.

로컬 호스트에서 작업하고 있지만 이것이 호스트에 영향을 미치는지 의심 스럽지만 프런트 엔드가 아닌 관리자입니다. 또한 js가 대기열에 있고 현지화되어 있는지 확인했습니다.

크롬 개발자 영역에 200 OK 메시지가 표시됩니다.

또한 http://codex.wordpress.org/AJAX_in_Plugins 에서 기본 AJAX를 테스트했으며 0도 반환했기 때문에 아래에 설명 된 코드 이외의 것이 있는지 궁금합니다.

지금은 jQuery에 무언가를 다시 보내려고합니다. 도움을 주시면 감사하겠습니다.

jQuery

jQuery(document).ready(function(){
    jQuery('.cl_link_buttons').val('id').click(function() {

            var currentid = jQuery(this).attr('id');

            //alert(currentid);
            console.log(currentid);

            jQuery.ajax ( data = {
                action: 'cleanlinks_ajax_get_post_data',
                url: ajaxurl,
                type: 'POST',
                dataType: 'text',
                "currentid" : currentid

            });

            jQuery.post(ajaxurl, data, function(response) {

                var dataz = response;
                alert( dataz );
                console.log (dataz); //show json in console


            });

            return false;

    }); //end click event
}); //end doc ready

PHP

add_action("wp_ajax_cleanlinks_ajax_get_post_data", "cleanlinks_ajax_get_post_data");
add_action("wp_ajax_nopriv_cleanlinks_ajax_get_post_data", "cleanlinks_ajax_get_post_data");

function cleanlinks_ajax_get_post_data() {

$from_ajax =  $_POST['currentid'];

echo "do" . $from_ajax . "something";

die();


}

1
ajaxurl이 올바르게 설정되었는지 확인 했습니까?
Andrew Bartel

브라우저 콘솔에 오류가 표시됩니까? 그렇다면 무엇입니까?
s_ha_dum

2
jQuery('.cl_link_buttons').val('id').click(function()이상해 보인다.
fuxia

Andrew, 그렇습니다. Chrome Inspector의 요청 URL에 domain / wp-admin / admin-ajax.php가 표시됩니다.
Apina

@s_ha_dum 표시되는 오류가 없습니다
Apina

답변:


40

0액션은 액션의 콜백 기능 (AJAX 데이터에) 또는 설정되지 않은 것이 하나의 응답 수단은 찾을 수 없다.


2
네, 정답입니다. 끝에 die ()를 추가하면 스크립트가 종료됩니다. 출력의 끝에 END가 0으로 표시되면 그 대답은 기술적으로 정확하지만 얻을 수있는 모든 것이 '0'이면 아무것도 반환되지 않았으며이 답변에 설명 된대로 오류가있는 것입니다.
Hybrid Web Dev

또는 아약스 요청을 처리하는 PHP에서 의도적으로 아무것도 반환하지 않았습니다. 무언가를 반향하지 않으면, 그렇지 않으면 .always그것을 포착하는 데 사용 하십시오.
Solomon Closson

20

당신이해야 할 일은 die();함수의 끝에 추가하는 것입니다 .

http://codex.wordpress.org/AJAX_in_Plugins 에서 이유 등을 참조하십시오.

노트:

  • 당신은 echo실행하기 전에 무언가를 해야 합니다 die. 이렇게하면 서버 오류가 방지되고 디버깅시 도움이됩니다.

7
이것은 WP AJAX 0 문제에 대한 답변입니다.
Ben Racicot

방금 추가하면 실제로 die()뭔가를 반향하지 않고,이 또한 당신에게 500 내부 서버 오류를주고, 반환 0을 위해 wp-admin/admin-ajax.php. 값을 설정하는 것만으로 반품 할 필요가없는 경우에도 항상 무언가를 반향해야합니다. 그렇지 않으면, 아무 것도 반향하지 않으면를 캡처하는 die()데 사용해야 .always()하고, 안으로 들어 가지 않게되며 .done(), .fail()아무것도 = 500 오류없이 죽기 때문입니다.
Solomon Closson

링크 나 작업 코드가 있으니 살펴볼 수 있습니까? @SolomonClosson
Francisco Corrales Morales

모든 답변은 실제 환경에서 테스트되었습니다. 이것을 테스트하는 것은 매우 간단합니다 . 이전에 아무것도 출력하지 않고 파일 die();에서 아약스 함수를 수행 하고 아약스 functions.php를 통해 액션을 호출하십시오.var testing = $.ajax( ... ); testing.fail(function(response) { console.log('Failed ' + response); }); testing.done(function(response) { console.log('Success ' + response); }); testing.always(function(response) { console.log('Ajax Request complete: ' + response); });
Solomon Closson

Failed (실패)가 표시되고 응답은 500 Internal Server Error (내부 500 서버 오류)입니다.
Solomon Closson

2

그래서 나는 그것을 해결했다. jQuery는 아니었지만 콜백 함수의 배치였습니다. 나는 그것을 메인 플러그인 파일로 옮겼고 효과가 있었다.


4
어떻게했는지 보여줄 수 있습니까?
Francisco Corrales Morales

1
이 같은 문제가 발생했습니다. 어떻게 해결했는지 보여 주실 수 있습니까?
Jeremy

또 다른 대답은 다음과 같습니다. wordpress.stackexchange.com/a/131397 @Jeremy
Francisco Corrales Morales

2

나는 같은 문제가 있습니다. 그리고 그것을 해결했습니다. 다음과 같이 "action"변수를 보내야합니다.

var dataString = {lat: '55.56', lng: '25.35', action:'report_callback'};
 $.ajax({                            
        url: "http://domain.net/wp-admin/admin-ajax.php",  
        type: "POST",
        //some times you cant try this method for sending action variable
        //action : 'report_callback',
        data:dataString,        
        success: function(data){ 
            console.log(data);

            },
        error: function() {
            console.log("Error");            
        }
    });

wp-admin / admin-ajax.php는 액션 변수를위한 핸들러이기 때문에 :

if ( empty( $_REQUEST['action'] ) ) {...}
Line 26

4
OP action 매개 변수를 보냅니다 . 이것이 효과가 있었지만 여기서 문제가되지 않았습니다.
s_ha_dum

1

콘솔에서이 코드를 실행 해보십시오

jQuery.post(ajaxurl, {action:'cleanlinks_ajax_get_post_data'}, function(response) {
     console.log (response);
});

JavaScript 코드에 대해 많은 잘못된 점을 볼 수 있으며 그 이유 일 수 있습니다.


글쎄, 내가 완전히 이해하지 못하는 많은 것들이 나오고 있습니다. 내가 이해하는 것 : ReadyState 4, 상태 200, responseText "0". 그런 다음 응답 0이 나타납니다. 특정 항목이 있으면 여기에서 찾아야합니까? 코드에 문제가있는 경우 문제를 지적하고 조사 할 수 있지만 여전히 jQuery를 배우고 있습니다.
Apina

사이트를 실시간으로 운영하고 있습니까?
Omar Abid

아니요, 로컬 호스트입니다
Apina

말하기 어렵다. console.info (ajaxurl); 그것이 무엇을 제공하는지 봅니까?
Omar Abid


1

나는이 문제도 있었고, PHP 함수 return대신에 사용하고 있다는 사실이었다 echo. echo수정 하기 위해 변경하십시오 .

function doAjax() {
    $result = getPosts();
    echo json_encode($result, true);
    die();
}

0

나는 같은 문제가있어서 그것을 wp_die()끝내기 위해 함수 끝에서 사용 했습니다 echo. 대본에 액션을 전달하는 것을 잊지 마십시오.

반드시 함수가 wp_ajax_nopriv처럼 사용 해야하는지 확인하십시오 wp_ajax.


0

참고로, 여기에 도착하는 사람은 "ajax request is 0을 반환합니다 public."

add_action( 'wp_ajax_my_action', [$object, 'my_method']);

add_action외부에서 메소드를 호출 할 수 없으면 침묵합니다 $object.


0

wp_localize_script () 함수를 사용하여 아약스 URL을 설정하지 않으면 관리자 아약스는 0을 반환합니다. 워드 프레스 버그라고 생각합니다. 다음은 예입니다.

    wp_enqueue_script( 'search_js', get_template_directory_uri() . '/js/search.js', array( 'jquery' ), null, true );    
    wp_localize_script( 'search_js', 'ajaxurl', admin_url( 'admin-ajax.php' ) );

자바 스크립트 파일 (search.js) :

    $('#search_input').autocomplete({
    source: function(request, response) {

        $.ajax({
            type: 'POST',
            dataType: 'json',
            url: ajaxurl,
            data: 'action=my_custom_action_search&search_criteria=' + request.term,
            success: function(data) {
                response(data);
            },
            error: function(errorThrown){
                console.log(errorThrown);
            } 
        });
    },
    minLength: 3
});

0
jQuery(document).ready(function(){
    jQuery('.cl_link_buttons').val('id').click(function() {
       $.ajax({
            type:'POST',
            url: ajaxurl,
            data: {
                action : 'ajax_filter',
                currentid : 'currentid'
            },
            success: function (result) {
                console.log(result);
                $result = $(result);
                        $result.fadeIn('7000');
                        $("#showresults").html(result);

            },
            error: function (xhr, status) {
                alert("Sorry, there was a problem!");
            },
            complete: function (xhr, status) {
                $('#showresults').slideDown('slow')
            }
            });
     });
}); 

// 코드 함수 PHP

<?php
    add_action( 'wp_ajax_nopriv_ajax_filter', 'ajax_filter' );
    add_action( 'wp_ajax_ajax_filter', 'ajax_filter' );
    function ajax_filter(){
        $date = isset($_POST['date']) ? $_POST['date'] : 0;
        echo $date;
        die();
    }
?>

코드를 게시하는 것은 좋지 않습니다.이 코드가 어떤 역할을하는지 설명해 주시겠습니까?
bravokeyl

중요 : $ date = isset ($ _ POST [ 'date'])? $ _POST [ '날짜'] : 0; 그리고 함수 die ();
Ngocheng

0

오류 0 :), action => 'action'이 발생하는 사람들

var data = { 'action': 'firmabilgilerikaydet', 'data': form_data };

$.post(ajaxurl, data, function(response) { alert(response); });

-1
당신은 시도 :

add_action ( 'init', 'ly_form_ajax_init');


함수 ly_form_ajax_init () {
    wp_register_script ( 'ly-form-ajax-script', plugins_url (). '/ ly-form / js / ly-script.js', array ( 'jquery'));
    wp_enqueue_script ( 'ly-form-ajax-script');

    wp_localize_script ( 'ly-form-ajax-script', 'ly_form_ajax_object', 배열 (
        'ajaxurl'=> admin_url ( 'admin-ajax.php'),
        'redirecturl'=> home_url (),
        'loadingmessage'=> __ ( '')
    ));
}
// 액션 : contact_ajax
add_action ( 'wp_ajax_contact_ajax', 'my_function');
add_action ( 'wp_ajax_nopriv_contact_ajax', 'my_function');

함수 my_function () {
    ob_clean ();
    에코 "http://sanvatvungcao.com";
    wp_die ();
}

/ **
 * 다음과 같은 페이지의 짧은 코드 : [ly-form]
 * @param 유형 $ atts
 * @param 유형 $ content
 * @ 반환 문자열
 * /
함수 ly_form_shortcode ($ atts, $ content = "") {
    echo html_form_code ();
}
add_shortcode ( 'ly-form', 'ly_form_shortcode');

// HTML 양식이 표시됩니다.
함수 html_form_code () {
    $ html = "";
    $ html. = '';
    $ html. = '';

    $ html. = '        

Họ đệm *

'; $ html. = '

십 *

'; $ html. = '

Địa chỉ *

'; $ html. = '

이메일 *

'; $ html. = '

Nội dung * dg

'; $ html. = ''; $ html. = ''; $ html. = ''; $ html. = ''; $ html을 반환; } 그리고 여기 js (ly-script.js)가 있습니다 : (함수 ($) { $ (document) .ready (function () { // AJAX 양식 제출 수행 $ ( 'form.ly-form-ex'). on ( 'submit', function (e) { e.preventDefault (); $ ( '# loading'). html ( 'loading ...'); var dataString = {action : 'contact_ajax'}; $ .ajax ({ 유형 : "POST", url : ly_form_ajax_object.ajaxurl, 데이터 : dataString, 성공 : 기능 (데이터) { $ ( '# loading'). html (데이터); }, 오류 : 기능 (errorThrown) { alert (errorThrown); } }); }); }); // 준비 완료 }) (jQuery);

그것이 당신에게 도움이되기를 바랍니다.


당신은 이유 를 설명하고 싶을 수도 있습니다 :)
kaiser

여기서 결론은 ob_clean () 일 수 있습니다. 기능. 당신은 할 수 있고 경험
Ly Van Vu

-2

if문장을 추가하십시오 :

function my_function(){
$id = $_POST['variation_id'];

    if(isset($_POST['variation_id'])) { 


//your coded function


die();
}



}// end function

1
그게 어떻게 문제를 해결할까요? 허용되는 답변과 원래 코드를 적어 둡니다.
fuxia
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.