2016-05-19 18 views
2

Ich hätte gerne einen Code zum Hinzufügen oder Entfernen von Datenbanklesezeichen. Der Code ist bereit und es fügt hinzu und entfernt von Datenbanklesezeichen richtig, aber wenn ich die Funktion anrufe, gibt es die json error statt json success zurück, selbst wenn der Code funktioniert.json_encode gibt 200 zurück undefined

Ich mag würde wissen, was mit dem Code falsch ist (dass ich von woanders bekommen und anpassen), weil die Client-Seite ist nicht die richtigen Werte true oder false empfängt, löst es nur die json beforeSending und json error.

Server-Seite:

if($isFavorite) { 
    // if it's favorite, remove from bookmarks 
    return json_encode(array("status" => true, "added" => false)); 
} else { 
    // if it's not favorite, include into bookmarks 
    return json_encode(array("status" => false, "added" => true)); 
} 

Client-Seite:

<script> 
    function addItemToUsersList(userId, type, itemId) { 
     jQuery.ajax({ 
      'url': 'xxx', 
      'type': 'GET', 
      'dataType': 'json', 
      'data': {userid: userId, type: type, itemid: itemId}, 
      'success': function(data) { 
       console.log('json success'); 
      }, 
      'beforeSend': function() { 
       console.log('json beforeSending'); 
      }, 
      'error': function(data) { 
       console.log('json error'); 
       console.log(data.status + ' ' + data.added); 
      } 
     }); 
    } 
</script> 

Die console.log(data.status + ' ' + data.added); Linie meldet 200 undefined

Wie kann ich die richtigen Werte true oder false Rückkehr sowohl für "status" und "added"?


Edit: Die json success wird nie auf Konsole angemeldet, so dass ich nicht weiß, was auf Server-Seite passiert ist. Ich muss das wissen, weil ich die Klasse eines Elements ändern muss, um einen leeren oder gelben Stern anzuzeigen.

+1

Sind Sie sicher, dass Sie wirklich die Ausgabe an den Client irgendwo senden. –

+2

Es ist schon eine Weile her, seit ich mit PHP gearbeitet habe, aber sollst du nicht den JSON aussprechen? 'echo json_encode (...)'. –

+1

Senden Sie sie als Ganzzahlen und behandeln Sie sie bei der Rückgabe. Boolesche Werte sind problematisch zu senden. –

Antwort

4

Wenn Sie return in dem Ergebnis sind und nichts mit dieser Rückgabe an anderer Stelle tun, erhalten Sie keine Antwort auf Ihren Ajax-Aufruf, also ist es undefined. Wie @MikeC sagt, musst du es an einem bestimmten Punkt echo.

Wenn Sie nicht bereits an anderer Stelle Echo, versuchen:

$response = array(
    'status' => $isFavourite, 
    'added' => !$isFavourite 
); 
echo json_encode($response); 

Mein Vorschlag ist, auch wenn ‚Status‘ und ‚hinzugefügt‘, jedes Mal wirklich genau das Gegenteil voneinander sind dann nur Sie wahrscheinlich brauchen 'Status' selbst senden. In Ihrem JS können Sie einfach "Status" überprüfen und den Booleschen Wert wie oben beschrieben umkehren, wenn Sie wissen möchten, welcher Wert added wäre.

var added = !data.status; 

aktualisiert

Wenn Ihre Ajax-Anforderung zurück an die Funktion error kommen, die Anforderung selbst wahrscheinlich versagt.

Ihre Fehlerfunktion Um dies zu ändern, zu debuggen, was passiert ist:

'error': function(jqXHR, status, error) { 
    console.log(status); 
    console.log(error); 
} 

Sie haben einen Fehler in serverseitigen Code könnte irgendwo oder die falsche PHP-Skript Sie anrufen vielleicht?

+0

Aber was ich bekommen muss, ist, dass die Funktion ein Erfolg war und was darin passierte, wenn das Lesezeichen hinzugefügt oder entfernt wurde. Ich habe nur ein Beispiel gegeben, was ich von der Server-Seite bekommen habe. – William

+1

@William Ich verstehe, aber wiederholen Sie die 'json_encode()' irgendwo in der PHP? Sie verstehen, dass 'return json_encode()' allein nichts von der Serverseite zurück an die JS sendet? – BadHorsie

+0

Ok, ich habe die 'return' in' echo' geändert und 'array' (" status "=> false," added "=> true)' to '" status "=> true' geändert, aber immernoch bekomme ich nur die Nummer 200 ruft 'console.log (data)' auf. – William