2017-12-21 2 views
-1

Ich habe Probleme, eine Array-Antwort von einer PHP-Funktion in jQuery AJAX. Mein AJAX ist wie folgt:PHP zu AJAX-Antwort fehlgeschlagen [Objekt Objekt]

function getStats() { 

    target = $j(event.target); 
    parent = $j(target).closest('article'); 
    property_id = $j(parent).attr('ID').replace('property-',''); 
    post_id = $j(parent).attr('data-post-id'); 

    $j.ajax({ 
     url: ajaxobjects.ajax_url, 
     // dataType: 'json', 
     data : { 
      action : 'getStats', 
      property_id: property_id, 
      post_id: post_id 
     }, 
     success : function(result) { 
      console.log('success, result is: ' + result + '|') 
     }, 
     error : function(data) { 
      console.log('failed' + result); 
     } 
    }) 
} 

Meine PHP-Funktion ist ziemlich lage so werde ich es nicht fügen Sie alle, aber die Schlüsselrolle am Ende ist:

$arr = array(
    'total_this_week' => $total_this_week, 
    'total_this_month' => $total_this_month, 
    'total_last_month' => $total_last_month, 
    'total_this_year' => $total_this_year, 
    'total_all_time' => $total_all_time 
    ); 

print json_encode($arr); 

... was, wenn ich verlassen die dataType: 'json' off in dem AJAX-Skript gibt mir den folgenden JSON-Array in der Konsole:

{ 
    "total_this_week": "783", 
    "total_this_month": "2341", 
    "total_last_month": "7117", 
    "total_this_year": "36247", 
    "total_all_time": "57792" 
} 

Aber ich kann es nicht result.total_this_week mit Zugriff als ich sich nur einen String denken. Wenn ich dataType zu JSON einschalte, lautet das Konsolenergebnis failed[object Object].

Verwirrt. Was mache ich falsch?

Update Ich habe das Problem identifiziert. Es gibt eine suffixed 0 am Ende meines Arrays, aber ich habe keine Ahnung, woher es kommt. Ich habe sogar völlig die ganze Funktion entfernt und manuell erstellt das Array aber immer noch die json_encode Antwort auf AJAX hat die Null am Ende wie folgt:

`failed{"readyState":4,"responseText":"{\"a\":1,\"b\":2,\"c\":3,\"d\":4,\"e\":5}0","status":200,"statusText":"parsererror"}` 

Lösung Nach einiger Spaß Stunden war es nichts zu mach mit meinem Code, zumindest nicht den Teil, den ich dachte. Wordpress fügt anscheinend eine Null zu admin-ajax.php Antworten hinzu. Die Lösung bestand darin, einfach die(); hinzuzufügen, nachdem das JSON-Array von PHP wiedergegeben wurde.

+1

Der Ausgang empfiehlt Ihnen, die 'error' Handler in Ihrer AJAX-Request treffen sind. Überprüfen Sie die Netzwerkregisterkarte der Konsole, nachdem Sie die Anfrage gestellt haben, und notieren Sie sich den HTTP-Statuscode zusammen mit dem Antworttext. –

+0

Der Statuscode ist 200 und zeigt korrekte URL/Variablen an, zum Beispiel 'admin-ajax.php? Action = getStats & property_id = 123456 & post_id = 78910'. Ich habe auch gerade 'result [0] .total_this_week' versucht, aber das gibt auch' failed [object Object] '. – d1ch0t0my

+0

Sorry, mein Fehler Ich bekomme einen undefinierten Fehler, wenn ich 'result [0] .total_this_week' versuche. – d1ch0t0my

Antwort

-1

Sie haben JSON.parse zu verwenden:

... 
success : function(result) { 
    console.log('success, result is: ' + JSON.parse(result).total_this_week + '|') 
}, 
... 
+0

Oder '$ .parseJSON (Ergebnis) ....' - und es wäre klug, einige defensive Überprüfung zu machen, um zu sehen, ob es legitim geparst ist ... –

+1

Die bessere Lösung wäre, einfach 'dataType: 'json'' zu verwenden und verstehe, was das zum Ergebnis führt. –