Simpler Ajax response ist leer


Status
Dieses Thema wurde gelöst! Zur Lösung gehen…

Jan-Frederik Stieler

Monsterator
Moderator
#1
Hallo,
ich verzweifle mal wieder an einem popelligen Ajax-Formular. Ich kapiers einfach nicht.

Hier das Formular. Das spielt eigentlich keine sonderliche Rolle.
HTML:
<form method="POST" action="test.php" id="searchForm">
                <div class="input-group">
                    <input id="scanner_input" name="isbn" class="form-control" placeholder="Click the button to scan an EAN..." type="text" value="<?php if(isset($_POST['isbn']) and ($_POST['isbn'] != "")): echo $_POST['isbn']; endif; ?>">
                    <span class="input-group-btn">
                        <button class="btn btn-default" type="button" data-toggle="modal" data-target="#livestream_scanner">
                            <i class="fa fa-barcode" style="font-size:1.45em;"></i>
                        </button>
                    </span>
                </div>
                <div class="input-group">
                    <label class="radio-inline">
                        <input type="radio" name="show" id="show1" value="1" checked> HTML Ausgabe
                    </label>
                    <label class="radio-inline">
                        <input type="radio" name="show" id="show2" value="2"> Arrays
                    </label>
                    <label class="radio-inline">
                        <input type="radio" name="show" id="show3" value="3"> JSON
                    </label>
                    <label class="radio-inline">
                        <input type="radio" name="show" id="show4" value="4"> Plaintext
                    </label>
                    <label class="radio-inline">
                        <input type="radio" name="show" id="show5" value="5"> 5
                    </label>
                </div>
                <input type="submit" name="submit" value="suchen" id="sendForm" class="btn btn-default">
            </form>

Javascript:
$('#searchForm').on('submit', function(e){
            e.preventDefault();

            var form = $(this);
            var url = form.attr('action');
            var data = form.serialize();

            $.ajax({
                type: 'POST',
                url: url,
                dataType: 'json',
                data: data,
                success: function(response){
                    console.log(response);
                },
                error: function(response){
                    console.log(response);
                }
            });
        });
meinetest.php. Hier hab ich nur zum testen versucht das $_POST zurück zugeben. Aber mein responsetext ist immer leer.

test.php:
PHP:
<?php
$response = $_POST;

return $response;
Eigentlich müsste ich doch nach dem Abschicken $_POSt wieder in der Konsole ausgegeben bekommen, oder?

Grüße
 

Sempervivum

Erfahrenes Mitglied
#2
1. Das was Du unter response zu sehen bekommst, ist die Ausgabe des Skriptes, z. B. mit echo, nicht ein return-Wert. Aus der Beschreibung bei php.net bin ich nicht schlau geworden, aber ein Test zeigt, dass ein return im globalen Raum nichts in die Ausgabe schreibt, auch wenn ein Argument übergeben wird.
2. Du setzt dataType auf 'json', dann musst Du auch die Ausgabe in JSON kodieren, sonst führt es zu einem Fehler beim Parsen durch jQuery:
echo json_encode($_POST);
 
Zuletzt bearbeitet:

Jan-Frederik Stieler

Monsterator
Moderator
#3
Also return funktioniert dann nur wenn ich das z.B. innerhalb einer Funktion mache?
Weil return hab ich bisher immer verwendet. Aber wenn ich mich richtig erinnere dann steckte das immer in ner Funktion.

ich hab jetzt das mal so geänder:

$response = json_decode($_POST);

echo $response;


Der Responsetext ist aber immer noch leer.
Der Statuscode ist 200. Ich müsste doch im responsetext in der Konsole das JSON nun sehen, oder?
 
Zuletzt bearbeitet:

Sempervivum

Erfahrenes Mitglied
#4
Also return funktioniert dann nur wenn ich das z.B. innerhalb einer Funktion mache?
Ja, wenn ein Wert damit verbunden ist. Ohne Funktion funktioniert es auch in der Weise, dass das ganze Skript verlassen wird; ein Wert der damit verbunden ist, hat dann jedoch keine Funktion. So sagt es die Doku auf php.net.
 

Sempervivum

Erfahrenes Mitglied
#5
Ich müsste doch im responsetext in der Konsole das JSON nun sehen, oder?
Nicht ganz, denn wegen dataType: 'json', wird das JSON geparst und in eine entspr. Javascript Struktur umgewandelt. Diese sollte jedoch in der Konsole zu sehen sein. Hast Du getestet, ob der success- oder der error-Handler triggert? Beachte, dass außer dem JSON nichts ausgegeben wird, weil es sonst nicht geparst werden kann.
 
#8
Vielleicht kannst Du mir noch eine Frage beantworten.

Ich schicke meine $_POST daten an php und dort wird ne if-Abfrage durchgeführt unteranderem kann sowas dann kommen:

PHP:
    if($_POST['show'] == 2){
        echo "<br><br><pre>";
        print_r($inhalt);
        echo "<br><br>";
        echo '$_SESSION'."<br>";
        print_r($_SESSION);
        echo "</pre>";
    }
oder sowas
PHP:
if($_POST['show'] == 5){
         echo "<br>\n<br>\n<pre>\n";
    
         for($i = 0; $i < count($inhalt); $i++){
             echo '['.$i.']'.$inhalt[$i]."\n";
         }
    
         echo "<br>\n<br>\n";
         $keys = array_keys($_SESSION);
         for($i = 0; $i < count($_SESSION); $i++){
             echo '$_SESSION[\''.$keys[$i].'\']'.trim(strip_tags($_SESSION[$keys[$i]]))."\n";
         }
         echo "</pre>\n";
    
         $blabla = implode("\n",$inhalt);
    
         preview($blabla);
         echo "<br>\n";
         echo $blabla."\n";
         echo "<br>\n";
     }
Also ich schreibe meine $_POSt Daten in ne Session für eine spätere Verwendung.
Aber meine Frage wäre wie ich den dieses Ergebnis von IF nun komplett an mein Ajax zurück gebe?
Geht das überhaupt? Also im grunde wird bei einigen IF-Abfrage nHTMl zusammengebaut und das würde ich nun gerne per Ajax einblenden. Ohne das HTML in JS nochmal neu zusammenbauen zu müssen.
 
#10
Hi,
okay funktioniert. Ich hatte einen Fehler in der IF-Abfrage drinnen.
Den dataType muss man ja nicht unbedingt angeben. JQuery kann diese neigentlich auch automatisch erkennen.
Falls man beim Error ein [object object] in der Konsole rausbekommt muss man den response per JSON.stringify() lesbar machen.
Also z.B.: console.log('Error: ' + JSON.stringify(response));
Hilft vielleicht auch noch jemand anderem!

Dank Dir nochmal!
 
Zuletzt bearbeitet:
Status
Dieses Thema wurde gelöst! Zur Lösung gehen…