Admin Ajax returnează 0
Sunt relativ nou în jQuery și în special în AJAX. Am o mică problemă cu valoarea returnată care este întotdeauna 0, deși cred că acesta este de fapt mesajul de succes și nu returnează nimic.
Am căutat intens pe Google și am funcția die() în callback-ul PHP și cred că add_actions sunt corecte.
Lucrez pe un host local, deși mă îndoiesc că acest lucru îl afectează și totul este în admin, nu în frontend. Am verificat de asemenea că js-ul este încărcat și localizat.
Primesc un mesaj 200 OK în zona de dezvoltare Chrome.
Am testat și AJAX-ul de bază de la http://codex.wordpress.org/AJAX_in_Plugins și acesta a returnat tot 0, ceea ce mă face să mă întreb dacă este vorba de altceva decât codul prezentat mai jos.
În acest moment încerc doar să fac să trimită ceva înapoi către jQuery. Orice ajutor ar fi apreciat.
jQuery-ul
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); //arată json în consolă
});
return false;
}); //sfârșitul evenimentului click
}); //sfârșitul doc ready
PHP-ul
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 "fă" . $from_ajax . "ceva";
die();
}

Da, acesta este răspunsul corect. Tot ce face adăugarea lui die() la sfârșit este să termine scriptul. Acel răspuns este tehnic corect dacă vezi un 0 adăugat la SFÂRȘITUL output-ului, însă dacă tot ce primești este '0', atunci înseamnă că nu s-a returnat nimic și ai o eroare așa cum este descris în acest răspuns.

Ce trebuie să faci este să adaugi die();
la sfârșitul funcției tale.
Vezi motivul și mai multe detalii aici: http://codex.wordpress.org/AJAX_in_Plugins
Note:
- Ar trebui să folosești
echo
pentru a afișa ceva înainte de a executadie
. Acest lucru va preveni erorile de server și va ajuta la depanare.

De fapt, dacă doar adaugi die()
fără a afișa ceva, acest lucru va genera tot o eroare 500 Internal Server Error și va returna 0
pentru wp-admin/admin-ajax.php
. Ar trebui întotdeauna să afișezi ceva, chiar dacă doar setezi valori și nu este nevoie să returnezi nimic. Altfel, dacă nu afișezi nimic și folosești die()
, va trebui să utilizezi .always()
pentru a captura răspunsul, deoarece acesta nu va fi în .done()
, ci în .fail()
pentru că se termină fără a returna nimic = Eroare 500.

ai niște link-uri sau cod funcțional, ca să putem arunca o privire? @SolomonClosson

Toate răspunsurile mele au fost testate în medii live. Este foarte simplu să testezi asta, doar folosește die();
în funcția ajax din fișierul functions.php
fără să afișezi nimic înainte de aceasta, și apelează acțiunea via ajax, de exemplu: 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); });

Vei observa că "Failed" va apărea, iar răspunsul va fi o eroare 500 Internal Server Error.

Apoi adaugă un echo în funcția PHP chiar înainte de die();
, iar răspunsul va fi atunci rezultatul afișat cu echo.

Am testat acest lucru cu dataType
setat la HTML
, nu sunt sigur dacă alte tipuri de date returnează ceva diferit, sau ce se întâmplă când nu este setat, deoarece va încerca să ghicească tipul de date. În opinia mea, este mai bine să returnezi întotdeauna ceva, chiar dacă este un șir care spune 'succes' sau 'eșec'.

Un alt răspuns este aici: http://wordpress.stackexchange.com/a/131397 @Jeremy

Am avut aceeași problemă. Și am rezolvat-o. Trebuie să trimiți variabila "action" ca în exemplu:
var dataString = {lat: '55.56', lng: '25.35', action:'report_callback'};
$.ajax({
url: "http://domain.net/wp-admin/admin-ajax.php",
type: "POST",
// uneori poți încerca această metodă pentru trimiterea variabilei action
//action : 'report_callback',
data:dataString,
success: function(data){
console.log(data);
},
error: function() {
console.log("Eroare");
}
});
Deoarece în wp-admin/admin-ajax.php există un handler pentru variabila action:
if ( empty( $_REQUEST['action'] ) ) {...}
Line 26

Ei bine, apare o mulțime de lucruri pe care nu le înțeleg pe deplin. Ceea ce înțeleg: ReadyState 4, status 200, responseText "0".
Și apoi apare răspunsul 0.
Există ceva anume la care ar trebui să fiu atent aici?
Dacă există probleme cu codul, vă rog să le indicați și le pot analiza, încă învăț jQuery.

Greu de spus. Poți încerca să rulezi console.info(ajaxurl); și să vezi ce returnează?

/wp-admin/admin-ajax.php este răspunsul
editare --
/wp-admin/admin-ajax.php nedefinit

încearcă să înlocuiești ajaxurl cu 'http://localhost/wp-admin/admin-ajax.php' și vezi ce returnează

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("Ne pare rău, a apărut o problemă!");
},
complete: function (xhr, status) {
$('#showresults').slideDown('slow')
}
});
});
});
//funcție de cod 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();
}
?>

Doar pentru referință, pentru cei care vin din dezvoltarea de shortcode-uri, dacă primiți un răspuns corect prin cererea Ajax din WordPress dar se adaugă un 0 la final, acest lucru se întâmplă doar pentru că folosiți 'echo' în loc de 'return'. Shortcode-urile nu sunt concepute să 'echo' sau să afișeze nimic. Doar un alt scenariu de luat în considerare.

Am avut aceeași problemă, pentru a o rezolva am folosit wp_die()
la sfârșitul funcției mele, imediat după un echo
. Nu uitați să treceți acțiunea în scriptul dumneavoastră.
Pentru a fi sigur, verificați dacă funcția dumneavoastră trebuie să folosească wp_ajax_nopriv
la fel ca wp_ajax
.

Doar ca referință, pentru cei care ajung aici căutând pe Google "cererea ajax returnează 0":
Amintiți-vă că atunci când adăugați o acțiune AJAX la o metodă a unui obiect, asigurați-vă că modificatorul de acces al metodei este public
.
add_action( 'wp_ajax_my_action', [$object, 'my_method']);
add_action
pur și simplu tace dacă nu poate apela metoda dvs. în afara $object
.

Dacă nu utilizați funcția wp_localize_script() pentru a seta URL-ul AJAX, admin-ajax returnează 0. Cred că este o eroare în WordPress. Iată un exemplu:
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' ) );
Fișierul 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
});

Dacă utilizați localhost și codul PHP al serverului este într-un fișier de plugin, mai întâi conectați-vă la panoul de administrare și reîmprospătați pagina de plugin. În al doilea rând, verificați dacă plugin-ul este activat. Apoi mergeți pe frontend, reîmprospătați pagina și încercați să trimiteți din nou.

add_action('init', 'ly_form_ajax_init');
function 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', array(
'ajaxurl' => admin_url('admin-ajax.php'),
'redirecturl' => home_url(),
'loadingmessage' => __('')
));
}
// Acțiunea este: contact_ajax
add_action( 'wp_ajax_contact_ajax', 'my_function' );
add_action( 'wp_ajax_nopriv_contact_ajax', 'my_function' );
function my_function(){
ob_clean();
echo "http://sanvatvungcao.com";
wp_die();
}
/**
* Shortcode în pagină arată astfel: [ly-form]
* @param type $atts
* @param type $content
* @return string
*/
function ly_form_shortcode($atts, $content = "") {
echo html_form_code();
}
add_shortcode('ly-form', 'ly_form_shortcode');
//Formularul HTML va fi afișat,
function html_form_code() {
$html = "";
$html.= '';
$html.= '';
$html.= ' <p>Nume * </p>';
$html.= ' <p>Prenume * </p>';
$html.= ' <p>Adresă * </p>';
$html.= ' <p>Email * </p>';
$html.= ' <p>Conținut * dg</p>';
$html.= ' ';
$html.= '';
$html.= '';
$html.= '';
return $html;
}
( function( $ ) {
$(document).ready(function () {
// Execută trimiterea formularului prin AJAX
$('form.ly-form-ex').on('submit', function(e){
e.preventDefault();
$('#loading').html('se încarcă...');
var dataString = {action:'contact_ajax'};
$.ajax({
type: "POST",
url: ly_form_ajax_object.ajaxurl,
data: dataString,
success: function (data) {
$('#loading').html(data);
},
error: function (errorThrown) {
alert(errorThrown);
}
});
});
}); // sfârșit ready
} )( jQuery );
Sper că vă este de folos, Cele mai bune urări
