2017-03-23 1 views
0

Hoffentlich eine einfache Frage hier. Ich habe tatsächlich ein Beispiel benutzt, das ich auf SO gefunden habe, kann aber nicht herausfinden, warum es nicht funktioniert. Keine Fehler in der Konsole oder irgendetwas.Ajax Alert Response von PHP

Ich habe eine Ajax Post-Funktion, die ich verwende, um Daten an ein PHP-Skript übergeben.

Seine Weitergabe der Daten korrekt, aber die Antwort jedes Mal kommt als Fehlermeldung zurück. Ich kann bestätigen, dass die Serverseite die Daten erhält und korrekt verarbeitet, kann einfach nicht herausfinden, warum sie nie eine Erfolgsantwort zurückgibt.

Hier ist die Ajax:

$(function() { 
     $('#pseudoForm').on('click', '#submit', function (e) { 
      e.preventDefault(); 
      $.ajax({ 
       type: "POST", 
       url: "psu_output.php", 
       data: $('#pseudoForm').serialize(), 
       datatype: 'json', 
       success: function (response) { 
        if(response.type == 'success') { 
         $('#messages').addClass('alert alert-success').text(response.message); 
        } else { 
         $('#messages').addClass('alert alert-danger').text(response.message); 
        } 
       } 
      }); 
      return false; 
     }); 
    }); 
</script> 

Und in meinem PHP-Skript habe ich dies:

<?php 

$success = true; 

if($success == true) { 
    $output = json_encode(array('type'=>'success', 'message' => 'YAY')); 
} else { 
    $output = json_encode(array('type'=>'error', 'message' => 'WHOOPS')); 
} 

die($output); 
?> 
+1

Zur Laufzeit, was enthält 'response' eigentlich? – David

+0

Verwenden Sie 'console.log (Antwort)', um die Antwort zu sehen. – Barmar

+0

versuchen Sie, die $ Ausgabe anstelle von sterben() –

Antwort

2

Das Problem ist, dass datatype: 'json'dataType: 'json' sein sollte: Sie können mithilfe der folgenden Codezeile VOR ECHOING oder Drucken NOCH ETWAS VOM PHP-Skript tun. Bei Javascript wird zwischen Groß- und Kleinschreibung unterschieden.

+0

Vielen Dank für die Antwort. Für andere, die lesen mussten, musste ich eigentlich 2 Dinge tun: 1) den Tippfehler korrigieren und 2) es über den Rest meines PHP-Skripts stellen. Ich hatte es unten und es kam nicht richtig zurück. (Nun, es schickte die Antwort, aber Ajax sah es nicht). – fcamp

0

Wenn Sie mit JSON Antworten arbeiten, können Sie den Header so Ihrem Browser festlegen müssen und Ihr JavaScript könnte es richtig interpretieren:

<?php 

$success = true; 

if ($success == true) { 
    $output = json_encode(array(
     'type' => 'success', 
     'message' => 'YAY' 
    )); 
} else { 
    $output = json_encode(array(
     'type' => 'error', 
     'message' => 'WHOOPS' 
    )); 
} 

header('Content-Type: application/json'); 
echo $output; 
+0

Sie brauchen das nicht, wenn Sie 'dataType: 'json'' verwenden. Das Problem ist, dass er dort einen Tippfehler hat. – Barmar

+0

Es gibt so viele Möglichkeiten, es zu lösen, Ihre ist einer von ihnen, meiner ist auch einer. –

1

Der Fehler liegt daran, dass Sie die Rückgabe erhalten haben ed Daten als Json aber der Inhaltstyp ist eine einfache Zeichenfolge (text/html) so müssen Sie zunächst wie so die empfangenen Daten an JSON.parse():

$(function() { 
    $('#pseudoForm').on('click', '#submit', function (e) { 
     e.preventDefault(); 
     $.ajax({ 
      type: "POST", 
      url: "psu_output.php", 
      data: $('#pseudoForm').serialize(), 
      datatype: 'json', 
      success: function (response) { 
      response = JSON.parse(response); 
      if(response.type == 'success') { 
        $('#messages').addClass('alert alert-success').text(response.message); 
      } else { 
        $('#messages').addClass('alert alert-danger').text(response.message); 
       } 
      } 
     }); 
     return false; 
    }); 
}); 

Die zweite Option ist selbst die so Entfernen json-Header von PHP zu senden Notwendigkeit, JSON in Javascript zu analysieren.

header('Content-Type: application/json'); 

und dann

echo $output; 
+0

Das funktioniert auch! –

+1

'dataType: 'json'' lässt es automatisch analysieren. Das Problem ist, dass er dort einen Tippfehler hat. – Barmar