2017-08-24 1 views
0

Ich wurde gebeten, Ajax Post-Daten zum PHP-Skript, die ein weiteres Skript, die SQL-Verbindung zur Datenbank führen und alle Daten und Daten zu konvertieren JSON-Format. Dann werden die JSON-Daten auf der Konsole angezeigt. Ich wurde auch gebeten, den Ajax zu ändern, um die Werte wie Name und die Religion wie Abdullah beziehungsweise Muslim zu schreiben. Ich möchte Kodierung auf dem passwrapper durchführen, um Daten auf dem console.log zu erhalten und zu zeigen. in Ajax .htmlFehler beim Ausführen von Ajax-Post-Daten und echo diese Daten auf der Konsole Protokoll

<html> 
<head> 
<script type="text/javascript" src="/Cesium-1.34/ThirdParty/jquery-1.11.3.min.js"></script> 
</head> 
<div id="resulte"</div> 
<script type="text/javascript"> 
showData(); 
function showData() 
{ 
    $.ajax({ 
     type: "post", 
     url: "passwrapper.php", 
     dataType: "json", 
     data: { 
      lastName: 'Abdullah', 
      lastReligion: 'Muslim', 
     },  
     success: function(data){ 
      console.log(data); 
     }, 
     error: function(jqXHR, textStatus, errorThrown) { 
      alert('An error occurred... Look at the console (F12 or Ctrl+Shift+I, Console tab) for more information!'); 
      $('#resulte').html('<p>Status Code: '+jqXHR.status+'</p><p>ErrorThrown: ' + errorThrown + '</p><p>jqXHR.responseText:</p><div>'+jqXHR.responseText + '</div>'); 
      console.log('jqXHR:'); 
      console.log(jqXHR); 
      console.log('textStatus:'); 
      console.log(textStatus); 
      console.log('errorThrown:'); 
      console.log(errorThrown); 
     }, 

    }); 
}; 
</script> 
</body> 
</html> 

in passwrapper.php

 <?php 
include 'student.php'; 
executePass(); 

receivePost(); 
function receivePost() 
{ 
    if ((!isset($_POST["lastName"])) and (!isset($_POST["lastReligion"]))) 
    { 
     //do nothing 
    } 
    else 
    { 
     echo '<script>console.log("Last='.$_POST["lastName"].' lastReligion='.$_POST["lastReligion"].'");</script>'; 

    } 
} 

?> 

in student.php

<?php 
function executePass() 
{ 

    $conn = mysqli_connect('localhost','root','netwitness') or die ("Could not connect database"); 
    $db = mysqli_select_db($conn,'abdpractice') or die ('Could not select database'); 

    $result = mysqli_query($conn,"select * from student"); 
    $json_array = array(); 
    while ($row = mysqli_fetch_assoc($result)) 
    { 
     $json_array[] = $row; 
    } 

    echo json_encode($json_array); 
} 
?> 

meine Frage ist, wie alle Daten auf dem Konsolenprotokoll zu zeigen und als o Zeige die Postdaten auf der console.log .. Bitte ändere nicht die student.php ... nur die passwrapper.php ändern

+0

keinen Skriptblock aus passwrapper.php zurückgeben. Gebe das _data_ zurück (als JSON - im Moment gibst du JSON nicht zurück, also gibt es wahrscheinlich einen Fehler, wenn du in die Konsole schaust), und dann kannst du in deiner ajax "success" -Funktion eine console.log machen. Verwirrenderweise fügen Sie auch die students.php in die gleiche Datei ein. Das _does_ gibt JSON zurück, aber dann wird der Rest von passwrapper.php ausgeführt und versucht, ein Skript zurückzugeben. Also wird die Ausgabe an den Browser ein Wirrwarr der beiden Dinge sein und ungültig sein. – ADyson

+0

Können Sie mehr über Ihren Satz –

+0

ausarbeiten, welches Bit verstehst du nicht? Überprüfen Sie auf der Registerkarte Netzwerk Ihres Browsers, bei der Ajax-Anfrage - Sie werden sehen, wie die Antwort zurückkommt. Zuerst die Ausgabe von executePass() und dann die Ausgabe von receivePost(). Das zweite Bit der Ausgabe ist nicht JSON und deshalb ungültig, weil Sie dem Ajax-Aufruf sagen, dass er json zurück erwarten soll. – ADyson

Antwort

0

Dies sollte die Daten aus beiden Funktionen kombiniert, als JSON, die Ihre Ajax "Erfolg "Funktion kann loggen. Ihr vorhandener Code hat ein Problem, weil ein Teil davon versucht, JSON zurückzugeben, und der andere Teil versucht, einen <script>-Block zurückzugeben, der kein gültiger JSON ist und wahrscheinlich auch aus Sicherheitsgründen vom Browser sowieso nicht ausgeführt würde.

Ich habe auch die beiden Funktionen so geändert, dass sie ihre Ausgabe an den Aufrufer als PHP-Variablen zurückgeben, anstatt JSON-Strings direkt an den Browser zu senden. Dies macht sie wiederverwendbarer und macht es auch viel einfacher, die Ergebnisse dann zu einem einzigen kohärenten JSON-Objekt zu kombinieren, das an den Browser ausgegeben wird.

Der Befehl console.log(data); in Ihrer vorhandenen ajax "success" -Funktion wird sich um die Protokollierung aller zurückgegebenen Daten in Ihrer Browserkonsole kümmern.

$studentArr = executePass(); 
$postArr = receivePost(); 

echo json_encode(array("students" => $studentArr, "postvars" => $postArr)); 

function receivePost() 
{ 
    if ((!isset($_POST["lastName"])) and (!isset($_POST["lastReligion"]))) 
    { 
     //do nothing 
    } 
    else 
    { 
     return array ("lastName" => $_POST["lastName"], "lastReligion" => $_POST["lastReligion"]); 
    } 
} 

function executePass() 
{ 

    $conn = mysqli_connect('localhost','root','netwitness') or die ("Could not connect database"); 
    $db = mysqli_select_db($conn,'abdpractice') or die ('Could not select database'); 

    $result = mysqli_query($conn,"select * from student"); 
    $json_array = array(); 
    while ($row = mysqli_fetch_assoc($result)) 
    { 
     $json_array[] = $row; 
    } 


    return $json_array; 
} 

Nun, ich weiß nicht, die genaue Struktur der „Studenten“ Daten, also kann ich Ihnen kein genaues Beispiel für die Ausgabe geben Sie erhalten werden, aber wenn ich das übernehmen waren Ihre Studenten Tisch hatten 3 einfachen Felder - „id“, „Vorname“ und „Nachname“, und es gab vier Zeilen in der Tabelle, würden Sie eine endgültige JSON Ausgabe etwas wie diese:

{ 
    "students": 
    [ 
     { 
      "id": 1, 
      "firstname": "firstname1", 
      "lastname": "lastname1" 
     }, 
     { 
      "id": 2, 
      "firstname": "firstname2", 
      "lastname": "lastname2" 
     }, 
     { 
      "id": 3, 
      "firstname": "firstname3", 
      "lastname": "lastname3" 
     }, 
     { 
      "id": 4, 
      "firstname": "firstname4", 
      "lastname": "lastname4" 
     } 
    ], 
    "postvars": { 
     "lastName": "Abdullah", 
     "lastReligion": "Muslim" 
    } 
} 

Sie haben eine JSON-Objekt mit zwei Eigenschaften. Die Eigenschaft "Studenten" enthält ein Array aller Schüler in Ihrer Tabelle. Die Eigenschaft "postvars" ist ein weiteres Objekt, das Eigenschaften enthält, die den beiden POST-Variablen entsprechen, die Sie erfassen möchten.

+0

ist es möglich, das Array der gesamten Daten und die gebuchten Werte zu kombinieren, wenn ich die Rückkehr json _array zu echo json_array ändern? –

+0

nicht leicht nicht, weil die Daten in diesem Moment an den Browser gesendet werden anstatt an den aufrufenden Code zurückgegeben. Als allgemeine Designregel versuche ich sicherzustellen, dass Funktionen selbst niemals Inhalte direkt wiedergeben. Es ist flexibler, wenn sie nur Daten zurückgeben. Dann kann der aufrufende Code am tatsächlichen Endpunkt entscheiden, ob die Daten verarbeitet werden sollen, um sie zu echotieren oder in diesem Fall mit anderen Daten zu kombinieren. Es ist flexibler und Sie haben wiederverwendbare Datenfunktionen, die Sie unter verschiedenen Umständen aufrufen können. Ich glaube nicht, dass Sie etwas gewinnen, wenn Sie es direkt wiedergeben ... – ADyson

+0

... aber Sie verlieren etwas Flexibilität bei der Verwendung Ihres Codes. Außerdem müssten Sie echo json_encode ($ json_array) ausführen, wenn Sie das tun würden, weil es noch nicht JSON ist. Das Problem, das Sie haben werden, ist, dass es ein einzelnes Array zurückgibt, aber wenn Sie dann die POST-Daten zurückgeben, müssen Sie ein Objekt ausgeben. Ohne sie zu kombinieren, habe ich eine ungültige JSON-Antwort für den Client (ein Array + ein Objekt ohne Verbindungseigenschaften, Kommas usw.). jQuery wäre nicht in der Lage, beide Eingabebits in ein "Daten" -Objekt zu analysieren. – ADyson

Verwandte Themen