Es kann kein JSON-Objekt als Antwort auf eine Ajax-Anforderung mit wp_ajax
-
-
Was sehen Sie,wenn Sie zu http://www.example.com/wp-admin/admin-ajax.php?action=myAjaxFuncgehen?What do you see when you go to http://www.example.com/wp-admin/admin-ajax.php?action=myAjaxFunc
- 0
- 2014-11-17
- czerspalace
-
Irgendwelche Fortschrittebei Ihrer Frage?Könnten Siebitte nachfassen?Any progress on your question? Could you please follow up?
- 0
- 2015-04-15
- kaiser
-
oh ... dasist von vor 5 Monaten ... Ich habemeine eigene Frage übrigens amnächsten Tagbeantwortet,alsich siegepostet habe,mit Teilen der BODA82-Antwort -ich habe sieeinfachnicht als die richtige Antwortmarkiert;@toscho hat sein Follow-up viel spätergestern hinzugefügt. Ich kannnicht überprüfen,ob seine Antwortjetzt auchgutist,aberesmacht Sinnoh... 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 Antworten
- Stimmen
-
- 2014-11-18
Die Antwort von BODA82 hatgeholfen,aber schließlich wurdemir klar,dassich die
responseText
durch dieresponseJSON
-Methodein meinem JavaScript-Code hätteersetzen sollen. Imfolgenden Beispiel habeich die Ajax-Antwortergebnissein einer Variablengespeichert. Ich wusstenicht,dasseseine bestimmte Methodegibt,um die Antwortin JSON zuerhalten. Auf diese Weise wird das Objekt/Arraymit den Ergebnissenget_posts()
korrekt undnicht als Zeichenfolge zurückgegeben: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
Hinweisfür sich selbst,aber auch allgemeine Ratschläge: Wenn Sie abendsnichts reparieren können,ist diesein Zeichen,dass Sieins Bettgehen,ein Buch lesen und Sterne zählen sollten. Eine Antwort wird amnächsten Morgengefunden,je früher destobesser: 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
Fast damit Ihrer PHP-Funktion. Der Headermussnichtgesetzt werden. (Bearbeiten: Unter der Annahme,dass
get_posts()
tatsächlich Ergebnisse zurückgibt.)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' );
Und Ihr 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.'); } });
-
Wenn Sieeinige Datenmit JSON.stringify () speichern und diese dannin PHP lesenmüssen.Derfolgende Code hatbei mirfunktioniert.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
Esgibt einen Ausweg.Verwenden Sie
complete
anstelle vonsuccess
oderdone
:posts = $.ajax({ type: 'GET', url: ajaxurl, async: false, dataType: 'json', data: { action : 'getHotelsList' }, complete: function(results) {
Und versuchen Sie,
async:false
zuentfernen,wenn das Problem weiterhinbesteht.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.
Ich habeein Problemmit WordPress und Ajax.
Diesistmein JavaScript-Teil (ich habeihnetwasgekürzt):
Mein PHP-Code lautet wiefolgt:
Das Skripterhält die Ajax-Antwort von admin-ajax. Leidergibt die Konsoleeinen Fehler aus,wenn sie zur
each
-Anweisungim JavaScript-Codegelangt ...es heißt:Wennichein console.logmeiner "posts" -Varimache,erhalteicheine Zeichenfolge 'Array'. Unabhängig davon,wieich die Variable
$list
in PHP übergebe,wirdimmereine Zeichenfolge zurückgegeben. Die Abfragegibt Beiträge an anderer Stelle zurück,sodass sienicht leerist. Ich habe versucht,ohnejson_encode
,mit und ohne Deklaration des Headers,mitwp_send_json()
ob_clean()
zu setzen,bevorich das Array wiedergab und das Arrayeinfügteein Array ... Aberes kommtimmerinajax
als ZeichenfolgeArray
undeach
nicht durchlaufen kann.Dies sollteeine sehreinfache Sache sein undich kannnicht verstehen,warumesnichtfunktioniert. Ich habe keine anderen JavaScript- oder PHP-Fehler oder Warnungen und alles andere läufteinwandfrei.