Impossibile ottenere un oggetto JSON in risposta a una richiesta Ajax con wp_ajax
-
-
Cosa vedi quando vai su 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
-
Qualcheprogresso sullatua domanda?Perfavore,potresti seguirci?Any progress on your question? Could you please follow up?
- 0
- 2015-04-15
- kaiser
-
oh ... questo è di 5mesifa ... ho risposto allamia domandatra l'altroilgiorno dopo l'hopostata,usandobit di risposta BODA82 - semplicementenon l'ho contrassegnata come risposta corretta;@toscho ha aggiuntoil suo seguitomoltopiùtardiieri,nonposso verificare se anche la sua risposta èbuona ora,ha sensoperò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 risposta
- voti
-
- 2014-11-18
La risposta di BODA82 ha aiutato,ma allafine mi sono reso conto che avrei dovuto sostituire
responseText
conilmetodoresponseJSON
nelmio codice JavaScript. Nell'esempio seguente stavomemorizzandoi risultati della risposta Ajaxin una variabile. Non sapevo cifosse unmetodo specificoper ottenere la rispostain JSON. In questomodo l'oggetto/array coni risultati diget_posts()
viene restituito correttamentee non come una stringa: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
Notapersonale,ma anche consigliogenerale: senon riesci a sistemare qualcosa la sera è un segno che dovresti andare a letto,leggere un libroe contare le stelle. Una risposta verràtrovata lamattina successiva,prima èmeglio è: 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
Ci sei quasi con latuafunzione PHP. Non ènecessarioimpostare l'intestazione. (Modifica:inoltre,supponendo che
get_posts()
stiaeffettivamente restituendo risultati.)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' );
Eiltuo 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.'); } });
-
Quando salvi alcuni dati usando JSON.stringify ()e poi devi leggerliin php.Il codice seguente hafunzionatoperme.json_decode (html_entity_decode (stripeslashes ($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
C'è una via d'uscita.Utilizza
complete
invece disuccess
odone
:posts = $.ajax({ type: 'GET', url: ajaxurl, async: false, dataType: 'json', data: { action : 'getHotelsList' }, complete: function(results) {
Eprova a rimuovere
async:false
seilproblemapersiste.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.
Ho unproblema con WordPresse Ajax.
Questa è lamiaparte JavaScript (l'hotagliata unpo '):
Ilmio codice PHP èil seguente:
Lo script riceve la risposta Ajax da admin-ajax. Sfortunatamente la consolegenera unerrore quando arriva all'istruzione
each
nel codice JavaScript ... dice:Sefaccio un console.log deimiei "post" var ottengo una stringa 'Array'. Nonimporta comepasso la variabile
$list
in PHP,restituirà sempre una stringa. La query restituiscepost altrove,quindinon è vuota. Hoprovato senzajson_encode
,cone senza dichiarazione diintestazione,usandowp_send_json()
,mettendoob_clean()
prima diecheggiare l'array,inserendo l'arrayin un array ... Maentra sempreinajax
come una stringaArray
eeach
nonpuò scorrere attraverso diessa.Dovrebbeessere una cosamolto semplicee non riesco a capireperchénonfunziona. Non ho altrierrori o avvisi JavaScript o PHPe tuttoil restofunziona correttamente.