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();
}
jQuery('.cl_link_buttons').val('id').click(function()
wygląda dziwnie.Odpowiedzi:
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.źródło
.always
aby go uchwycić.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:
echo
coś zrobić przed wykonaniemdie
. Zapobiegnie to błędom serwera i pomoże podczas debugowania.źródło
die()
bez echa coś, będzie to również daje 500 Internal Server Error, i powrócić0
dowp-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 idie()
musisz użyć,.always()
aby go uchwycić, ponieważ nie będzie on.done()
, będzie,.fail()
ponieważ umrze bez niczego = 500 Błąd.die();
w funkcji ajax wfunctions.php
pliku 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); });
Więc to wypracowałem. To nie był jQuery jako taki, chociaż poprawiłem to, to było umieszczenie funkcji oddzwaniania. Przeniosłem go do głównego pliku wtyczki i działało.
źródło
Mam ten sam problem. I rozwiązałem to. Musisz wysłać zmienną „action” jak w przykładzie:
Ponieważ w wp-admin / admin-ajax.php jest programem obsługującym zmienną akcji:
źródło
action
parametr. Chociaż mogło to zadziałać, nie stanowiło to problemu.Spróbuj uruchomić ten kod na konsoli
Widzę wiele błędów w kodzie JavaScript i może to być powód.
źródło
Miałem też ten problem i to dlatego, że używałem
return
zamiastecho
w mojej funkcji PHP. Zmieniając to, abyecho
to naprawić.źródło
Miałem ten sam problem, aby go naprawić użyłem
wp_die()
na końcu mojej funkcji zaraz poecho
. Nie zapomnij przekazać swojej akcji na skrypcie.Dla pewności sprawdź, czy twoja funkcja musi używać
wp_ajax_nopriv
jakwp_ajax
.źródło
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
po prostu ucisza się, jeśli nie może wywołać twojej metody poza$object
.źródło
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:
Plik javascript (search.js):
źródło
// funkcja kodu php
źródło
Ci, którzy dostają błąd 0 :), action => 'action'
źródło
Mam nadzieję, że jest to dla ciebie pomocne, najlepiej
źródło
Spróbuj dodać
if
oświadczenie:źródło