No se puede obtener un objeto JSON en respuesta a una solicitud Ajax con wp_ajax
-
-
¿Qué ves cuando vas a http://www.example.com/wp-admin/admin-ajax.php?action=myAjaxFuncWhat do you see when you go to http://www.example.com/wp-admin/admin-ajax.php?action=myAjaxFunc
- 0
- 2014-11-17
- czerspalace
-
¿Algúnprogresoen tupregunta?¿Podría hacer un seguimiento?Any progress on your question? Could you please follow up?
- 0
- 2015-04-15
- kaiser
-
oh ...estoes de hace 5meses ... Respondí ami propiapreguntapor cierto,al día siguiente lapubliqué,usandopartes de la respuesta BODA82 - simplementeno lamarqué como la respuesta correcta;@toscho agregó su seguimientomuchomástarde ayer.Nopuedo verificar si su respuestatambiénesbuena ahora,aunquetiene sentido.oh... this is from 5 months ago... I did answer to my own question by the way the next day I posted it, using bits of BODA82 answer - I just didn't marked it as the correct answer; @toscho added his follow up much later yesterday I can't verify if his answer is also good now, it makes sense though
- 0
- 2015-04-16
- unfulvio
-
3 respuestas
- votos
-
- 2014-11-18
La respuesta de BODA82 ayudó,perofinalmenteme di cuenta de que debería haber reemplazadoelmétodo
responseText
conelmétodoresponseJSON
en mi código JavaScript. Enel siguienteejemplo,estaba almacenando los resultados de la respuesta Ajaxen una variable. No sabía que había unmétodoespecíficopara obtener la respuestaen JSON. Deestamanera,el objeto/matriz conget_posts()
resultados se devuelve correctamente yno como una cadena:posts = $.ajax({ type: 'GET', url: ajaxurl, async: false, dataType: 'json', data: { action : 'getHotelsList' }, done: function(results) { // Uhm, maybe I don't even need this? JSON.parse(results); return results; }, fail: function( jqXHR, textStatus, errorThrown ) { console.log( 'Could not get posts, server response: ' + textStatus + ': ' + errorThrown ); } }).responseJSON; // <-- this instead of .responseText
Notapara unomismo,perotambién un consejogeneral: sinopuede arreglar algopor lanoche,es una señal de que debeirse a la cama,leer un libro y contarestrellas. Seencontrará una respuesta a lamañana siguiente,cuanto antes,mejor: D
BODA82's answer helped, but eventually I realized that I should have replaced
responseText
withresponseJSON
method in my JavaScript code. In the example below I was storing the Ajax response results in a variable. I didn't know there was a specific method to get the response in JSON. In a such way the object/array withget_posts()
results is returned correctly and not as a string:posts = $.ajax({ type: 'GET', url: ajaxurl, async: false, dataType: 'json', data: { action : 'getHotelsList' }, done: function(results) { // Uhm, maybe I don't even need this? JSON.parse(results); return results; }, fail: function( jqXHR, textStatus, errorThrown ) { console.log( 'Could not get posts, server response: ' + textStatus + ': ' + errorThrown ); } }).responseJSON; // <-- this instead of .responseText
Note to self, but also general advice: if you can't fix something in the evening it's a sign you should go to bed, read a book, and count stars. An answer will be found the next morning, the earlier the better :D
-
- 2014-11-17
Casi ahí con sufunción PHP. Noesnecesario configurarelencabezado. (Editar:también,asumiendo que
get_posts()
en realidad devuelve resultados).function myAjaxFunc() { $posts = get_posts( array( 'posts_per_page' => -1, 'orderby' => 'title', 'order' => 'ASC', 'post_type' => 'my-post-type', 'post_status' => array( 'publish', 'draft' ) ) ); $list = array(); foreach ( $posts as $post ) { $list[] = array( 'id' => $post->ID, 'name' => $post->post_title, 'link' => get_permalink( $post->ID ), ); } echo json_encode( $list ); die; } add_action( 'wp_ajax_nopriv_myAjaxFunc', 'myAjaxFunc' ); add_action( 'wp_ajax_myAjaxFunc', 'myAjaxFunc' );
Y su Javascript:
$.ajax({ url: "<?php bloginfo('url'); ?>/wp-admin/admin-ajax.php", type: "POST", data: "action=myAjaxFunc", success: function(results) { var posts = JSON.parse(results); console.log(results); $.each(posts, function() { $('#someSelect').append( $('<option></option>').text(this.name).val(this.id) ); }); }, error: function() { console.log('Cannot retrieve data.'); } });
Almost there with your PHP function. No need to set the header. (Edit: Also, assuming
get_posts()
is actually returning results.)function myAjaxFunc() { $posts = get_posts( array( 'posts_per_page' => -1, 'orderby' => 'title', 'order' => 'ASC', 'post_type' => 'my-post-type', 'post_status' => array( 'publish', 'draft' ) ) ); $list = array(); foreach ( $posts as $post ) { $list[] = array( 'id' => $post->ID, 'name' => $post->post_title, 'link' => get_permalink( $post->ID ), ); } echo json_encode( $list ); die; } add_action( 'wp_ajax_nopriv_myAjaxFunc', 'myAjaxFunc' ); add_action( 'wp_ajax_myAjaxFunc', 'myAjaxFunc' );
And your Javascript:
$.ajax({ url: "<?php bloginfo('url'); ?>/wp-admin/admin-ajax.php", type: "POST", data: "action=myAjaxFunc", success: function(results) { var posts = JSON.parse(results); console.log(results); $.each(posts, function() { $('#someSelect').append( $('<option></option>').text(this.name).val(this.id) ); }); }, error: function() { console.log('Cannot retrieve data.'); } });
-
Cuandoguarda algunos datos usando JSON.stringify () y luegonecesita leerlosen php.El siguiente códigofuncionóparamí.json_decode (html_entity_decode (stripslashes ($jsonString)));When you save some data using JSON.stringify() and then need to read that in php. The following code worked for me. json_decode( html_entity_decode( stripslashes ($jsonString ) ) );
- 0
- 2019-12-04
- Vishal Tanna
-
- 2015-04-15
Hay una salida.Utilice
complete
en lugar desuccess
odone
:posts = $.ajax({ type: 'GET', url: ajaxurl, async: false, dataType: 'json', data: { action : 'getHotelsList' }, complete: function(results) {
Eintente eliminar
async:false
sielproblemapersiste.There is a way out. Use
complete
instead ofsuccess
ordone
:posts = $.ajax({ type: 'GET', url: ajaxurl, async: false, dataType: 'json', data: { action : 'getHotelsList' }, complete: function(results) {
And try to remove
async:false
if the problem persists.
Tengo unproblema con WordPress y Ajax.
Estaesmi parte de JavaScript (la recorté unpoco):
Mi código PHPesel siguiente:
El script obtiene la respuesta Ajax de admin-ajax. Desafortunadamente,la consola arroja unerror cuando llega a lainstrucción
each
en el código JavaScript ... dice:Si hago un console.log demis "publicaciones" var obtengo una cadena 'Array'. Noimporta cómopase la variable
$list
en PHP,siempre devolverá una cadena. La consulta devuelvepublicacionesen otros lugares,por lo quenoestá vacía. Intenté sinjson_encode
,con y sin declararelencabezado,usandowp_send_json()
,poniendoob_clean()
antes de hacereco de lamatriz,colocando lamatrizen unamatriz ... Pero siempreentraenajax
como una cadenaArray
yeach
nopuede recorrerla.Esto debería ser algomuy simple ynopuedoentenderpor quénofunciona. Notengo otroserrores o advertencias de JavaScript o PHP ytodo lo demásfuncionabien.