Não é possível obter um objeto JSON em resposta a uma solicitação Ajax com WP_AJAX
-
-
O que você vê quando vaipara 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
-
Qualquerprogressona suapergunta?Vocêpoderiaporfavor seguir?Any progress on your question? Could you please follow up?
- 0
- 2015-04-15
- kaiser
-
Oh ... Isto é de 5meses atrás ... Eu respondiparaminhaprópriaperguntapelo caminhono dia seguinte queeupostei,usandopedaços de resposta Boda82 -eu simplesmentenãomarcou como a resposta correta;@Toscho adicionou seu acompanhamentomuitotarde ontem Eunãoposso verificar se sua respostatambém éboa agora,faz sentidoemboraoh... 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 respostas
- votos
-
- 2014-11-18
A resposta de Boda82 Ajudou,maseventualmentepercebi que deveriater substituído
Responsetext
com ométodoResponseJson
nomeu código JavaScript. Noexemplo abaixo,euestava armazenando os resultados da resposta Ajaxem uma variável. Eunão sabia que havia ummétodoespecíficopara obter a respostaem JSON. De certaforma,o objeto/matrizget_posts ()
é retornado corretamentee não como seqüência de caracteres:posts=$ .Ajax ({ Tipo: 'get', URL: Ajaxurl, Assíncrio: Falso, DataType: 'JSON', Dados: {ação: 'getHotelslist'}, feito:função (resultados) { //uhm,talvezeunem precise disso? Json.parse (resultados); Retornar resultados; }, Falha: Função (JQXHR,TextStatus,Errorthrown) { console.log ('Nãofoipossível obterpostagens,resposta do servidor:' +textstatus + ':' +erryrown); } }). Response;//& lt; -issoem vez de .ResponseText
Notapara si,mastambém conselhosgerais: Se vocênãopode consertar algo ànoite,é um sinal que você deveirpara a cama,ler um livroe contarestrelas. Uma resposta seráencontradanamanhã seguinte,quantomais cedomelhor: 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
Quase lá com suafunção PHP. Não hánecessidade de definir o cabeçalho. (Edit: Além disso,assumindo
get_posts()
está realmente retornando 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' );
e seujavascript:
$.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 você salva alguns dados usando o JSON.Stringify ()e,em seguida,precisa lerissono PHP.O código a seguirfuncionouparamim.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
Há uma saída.Use
complete
em vez desuccess
oudone
:posts = $.ajax({ type: 'GET', url: ajaxurl, async: false, dataType: 'json', data: { action : 'getHotelsList' }, complete: function(results) {
e tente remover
async:false
se oproblemapersistir.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.
Eutenho umproblema com o WordPresse Ajax.
Esta é aminhapartejavascript (eu aparei umpouco):
Meu código PHP é o seguinte:
O script recebe a resposta do Ajax de Admin-Ajax. Infelizmente,o consolejoga umerro quandoele chega ao
cada umainstruçãono código JavaScript ... diz:
Seeufizer um console.log dosmeus "posts" vareu recebo uma "matriz" de string. Nãoimporta comoeupasse o
Lista $
Variávelno PHP,ela sempre retornará uma string. A consulta retornapostsem outro lugar,entãonãoestá vazia. Eutentei semjson_encode
,come sem declarar cabeçalho,usandowp_send_json ()
,colocandoob_clean ()
antes deecoar amatriz,colocando amatrizem umamatriz ...mas sempreentraemAjax
como uma stringArray
eCada
Não épossívelperceber.Isso deve ser uma coisamuito simplese não consigoentenderpor quenãoestáfuncionando. Eunãotenho outroserros dejavascript ouphp ou avisose tudo omais correbem.