Administrator Ajax zwraca 0


28

Jestem stosunkowo nowy w jQuery, aw szczególności w AJAX. Mam mały problem z wartością zwracaną zawsze wynoszącą 0, chociaż myślę, że to właściwie komunikat o sukcesie i nic nie zwraca.

Przeszukałem wersję Google i mam funkcję die () w wywołaniu zwrotnym PHP i uważam, że add_actions są poprawne.

Pracuję na lokalnym hoście, choć wątpię, żeby to wpłynęło i to wszystko w adminie, a nie w interfejsie. Sprawdziłem również, czy js jest kolejkowane i zlokalizowane.

Otrzymuję komunikat 200 OK w obszarze dla programistów chrome.

Przetestowałem również podstawowy AJAX ze strony http://codex.wordpress.org/AJAX_in_Plugins i zwrócił również 0, co sprawia, że ​​zastanawiam się, czy jest to coś innego niż kod opisany poniżej.

W tej chwili próbuję zmusić go do wysłania czegoś z powrotem do jQuery. Każda pomoc będzie mile widziana.

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
Czy sprawdziłeś, czy ajaxurl jest ustawiony poprawnie?
Andrew Bartel

Czy Twoja konsola przeglądarki wyświetla jakieś błędy? Jeśli tak, jakie one są?
s_ha_dum

2
jQuery('.cl_link_buttons').val('id').click(function()wygląda dziwnie.
fuxia

Andrew, tak, uważam, że jest poprawny, URL żądania w Inspektorze Chrome pokazuje domenę / wp-admin / admin-ajax.php
Apina

@ s_ha_dum Brak błędów
Apina

Odpowiedzi:


40

A 0środki reagowania albo że działanie nie jest ustawiony (w danych Ajax) lub że funkcję zwrotną przez Akcja nie może zostać znaleziony.


2
Tak, to poprawna odpowiedź. Dodanie die () do końca powoduje zakończenie skryptu. Ta odpowiedź jest technicznie poprawna, jeśli widzisz 0 dołączone do END wyjścia, jednak jeśli otrzymujesz tylko „0”, oznacza to, że nic nie zostało zwrócone i masz błąd opisany w tej odpowiedzi.
Hybrid Web Dev

Lub po prostu nic nie zwróciłeś celowo w php, który obsługuje żądanie ajax. Pamiętaj, aby coś powtórzyć, w przeciwnym razie użyj go, .alwaysaby go uchwycić.
Solomon Closson

20

Co musisz zrobić, to dodać die();na końcu swojej funkcji.

Zobacz przyczynę i więcej tutaj: http://codex.wordpress.org/AJAX_in_Plugins

Uwagi:

  • Powinieneś echocoś zrobić przed wykonaniem die. Zapobiegnie to błędom serwera i pomoże podczas debugowania.

7
To jest odpowiedź na problem WP AJAX 0.
Ben Racicot

Właściwie, jeśli po prostu dodać die()bez echa coś, będzie to również daje 500 Internal Server Error, i powrócić 0do wp-admin/admin-ajax.php. Zawsze powinieneś coś powtarzać, nawet jeśli tylko ustawiasz wartości i nic nie trzeba zwracać. W przeciwnym razie, jeśli nic nie powtórzysz i die()musisz użyć, .always()aby go uchwycić, ponieważ nie będzie on .done(), będzie, .fail()ponieważ umrze bez niczego = 500 Błąd.
Solomon Closson

masz jakieś linki lub działający kod, abyśmy mogli rzucić okiem? @SolomonClosson
Francisco Corrales Morales

Wszystkie moje odpowiedzi zostały przetestowane w środowisku na żywo. Bardzo łatwo to przetestować, po prostu wykonaj die();w funkcji ajax w functions.phppliku bez echa niczego wcześniejszego i wywołaj akcję za pośrednictwem ajax, np .: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

Zauważysz, pojawi się komunikat Niepowodzenie, odpowiedzią będzie 500 Błąd wewnętrzny serwera.
Solomon Closson


2

Mam ten sam problem. I rozwiązałem to. Musisz wysłać zmienną „action” jak w przykładzie:

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");            
        }
    });

Ponieważ w wp-admin / admin-ajax.php jest programem obsługującym zmienną akcji:

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

4
PO robi wysłać actionparametr. Chociaż mogło to zadziałać, nie stanowiło to problemu.
s_ha_dum

1

Spróbuj uruchomić ten kod na konsoli

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

Widzę wiele błędów w kodzie JavaScript i może to być powód.


To wymyśla wiele rzeczy, których nie do końca rozumiem. Co rozumiem: ReadyState 4, status 200, responseText „0”. A potem pojawia się odpowiedź 0. Czy jest coś konkretnego, czego powinienem tu szukać? Jeśli występują problemy z kodem, proszę je wskazać i mogę je przyjrzeć, wciąż uczę się jQuery.
Apina

Czy Twoja witryna działa na żywo?
Omar Abid

Nie, to localhost
Apina,

Ciężko powiedzieć. Czy możesz spróbować uruchomić console.info (ajaxurl); i zobaczyć, co daje?
Omar Abid

1
spróbuj zastąpić ajaxurl słowem „ localhost / wp-admin / admin-ajax.php ” i zobacz, co daje
Omar Abid

1

Miałem też ten problem i to dlatego, że używałem returnzamiast echow mojej funkcji PHP. Zmieniając to, aby echoto naprawić.

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

0

Miałem ten sam problem, aby go naprawić użyłem wp_die()na końcu mojej funkcji zaraz po echo. Nie zapomnij przekazać swojej akcji na skrypcie.

Dla pewności sprawdź, czy twoja funkcja musi używać wp_ajax_noprivjak wp_ajax.


0

Tylko dla odniesienia, dla każdego, kto tu trafia do Google, „żądanie ajax zwraca 0”: Pamiętaj, kiedy dodajesz akcję ajax do metody obiektu, aby upewnić się, że modyfikator dostępu do metod jest public.

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

add_actionpo prostu ucisza się, jeśli nie może wywołać twojej metody poza $object.


0

Jeśli nie używasz funkcji wp_localize_script () do ustawienia adresu URL ajax, administrator ajax zwraca 0. Myślę, że to błąd Wordpress. Oto przykład:

    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' ) );

Plik javascript (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')
            }
            });
     });
}); 

// funkcja kodu 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();
    }
?>

Sam kod pocztowy nie jest dobry, czy możesz wyjaśnić, co robi ten fragment kodu?
brawokeyl

ważne: $ date = isset ($ _ POST ['date'])? $ _POST [„data”]: 0; I funkcja die ();
Ngocheng

0

Ci, którzy dostają błąd 0 :), action => 'action'

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

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

-1
PRÓBUJESZ:

add Działalności („init”, „ly_form_ajax_init”);


funkcja ly_form_ajax_init () {
    wp_register_script ('ly-form-ajax-script', plugins_url (). '/ ly-form / js / ly-script.js', tablica ('jquery'));
    wp_enqueue_script ('ly-form-ajax-script');

    wp_localize_script („ly-form-ajax-script”, „ly_form_ajax_object”, tablica (
        'ajaxurl' => admin_url ('admin-ajax.php'),
        'redirecturl' => home_url (),
        'loadingmessage' => __ ('')
    ));
}
// Akcja to: contact_ajax
działanie dodatkowe („wp_ajax_contact_ajax”, „moja_funkcja”);
add Działalności („wp_ajax_nopriv_contact_ajax”, „moja_funkcja”);

funkcja my_function () {
    ob_clean ();
    echo „http://sanvatvungcao.com”;
    wp_die ();
}

/ **
 * Krótki kod na takiej stronie: [ly-form]
 * @param wpisz $ atts
 * @param wpisz $ content
 * @ powrót łańcucha
 * /
funkcja ly_form_shortcode ($ atts, $ content = "") {
    echo html_form_code ();
}
add_shortcode („ly-form”, „ly_form_shortcode”);

// Wyświetli się formularz HTML,
funkcja html_form_code () {
    $ html = "";
    $ html. = '';
    $ html. = '';

    $ html. = '        

Họ đệm *

„; $ html. = '

Dziesięć *

„; $ html. = '

Ỉa chỉ *

„; $ html. = '

E-mail *

„; $ html. = '

Nung dung * dg

„; $ html. = ''; $ html. = ''; $ html. = ''; $ html. = ''; zwraca $ html; } I TUTAJ js (ly-script.js): (funkcja ($) { $ (dokument) .ready (function () { // Prześlij formularz AJAX $ („form.ly-form-ex”). on („prześlij”, funkcja (e) { e.preventDefault (); $ („# loading”). html („loading ...”); var dataString = {action: 'contact_ajax'}; .ajax ({ wpisz: „POST”, url: ly_form_ajax_object.ajaxurl, data: dataString, sukces: funkcja (dane) { $ („# ładowanie”). html (dane); }, error: function (errorThrown) { alert (errorThrown); } }); }); }); // koniec gotowy }) (jQuery);

Mam nadzieję, że jest to dla ciebie pomocne, najlepiej


Możesz wyjaśnić dlaczego :)
Kaiser

Dolna linia tutaj może być ob_clean (); funkcjonować. Możesz zrobić i doświadczyć
Ly Van Vu

-2

Spróbuj dodać ifoświadczenie:

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

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


//your coded function


die();
}



}// end function

1
Jak to rozwiązałoby problem? Zanotuj zaakceptowaną odpowiedź i oryginalny kod.
fuxia
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.