2017-03-08 4 views
-1

Ich versuche, ein JSON zu PHP POST, wo es entschlüsselt und in MySQL-Datenbank geschoben werden soll.AJAX POSTing zu PHP funktioniert nicht

Dies ist mein JavaScript-Code.

var dictstring = "{sensorid: \""+ name +"\", x: " +pos.x +" ,y: "+pos.y+"}"; 
        console.log(dictstring); 

        $.ajax({ 
         type: "POST", 
         contentType: 'application/json; charset=utf-8', 
         dataType: "json", 
         url: "myfile.php", 
         data: JSON.stringify(dictstring), 
         success: function(data){ 
         alert('Success'); 
         }, 
        error: function(e){ 

        console.log(e.message); 
         } 
        }); 

Und das ist mein PHP-Code

<?php 


$jsonData = file_get_contents('php://input'); 

$data_back = json_decode($jsonData); 
$unit = $data_back->{"sensorid"}; 
$x_axis = $data_back->{"x"}; 
$y_axis = $data_back->{"y"}; 


// Create connection 
$con=mysqli_connect("xxxxxxx:xxxx","xxxxx","xxxx","xxxxxxxx"); 

// Check 
if (mysqli_connect_errno()) { 
    echo "Failed to connect to MySQL: " . mysqli_connect_error(); 
} 

//Insert Values 
$sql_hm = "INSERT INTO xxxx(unit, x_axis, y_axis) 
VALUES ('$unit', $x_axis, $y_axis)"; 

if ($con->query($sql_hm) === TRUE) { 
    echo "values inserted successfully"; 

} else { 
    echo "No data "; 
} 



?> 

Ich weiß, dass der PHP-Teil funktioniert - ich versuchte POSTen JSON-Daten mit content: application/json von einer REST Client-Anwendung und es funktioniert. Aber wenn ich es mit meinem Javascript-Code versuche, ist es nicht POSTing. Ich kann den "dictstring" Zeichenfolgenwert in der Konsole sehen. Ich kann die Warnung "Erfolg" auch nicht sehen. Interessanterweise wird der "Erfolg" -Alarm angezeigt, wenn ich den dataType: "json" -Zeile entferne. POSTing läuft jedoch immer noch nicht, da ich die Werte in der Datenbank nicht sehen kann.

Was fehlt mir hier?

+0

Warum ist "dictstring" eine Zeichenkette? Und warum gibst du es an 'JSON.stringify()'? – Andreas

+0

Ich denke, Sie müssen nicht 'stringify', da' dictstring' bereits eine JSON-Zeichenfolge ist. –

+0

Schreiben Sie kein eigenes JSON, und stellen Sie die Frage nicht mehrmals hintereinander. – miken32

Antwort

2
var dictstring = "{sensorid: \""+ name +"\", x: " +pos.x +" ,y: "+pos.y+"}"; 

Sie haben einen String.

data: JSON.stringify(dictstring), 

Die Sie dann in eine JSON-Darstellung dieser Zeichenfolge konvertieren.

$data_back = json_decode($jsonData); 

Die Sie zu einer Zeichenfolge dekodieren.

$unit = $data_back->{"sensorid"}; 

Die Sie versuchen, wie ein Objekt zu behandeln.


Beginnen Sie mit einem Objekt, kein String:

var dictstring = { sensorid: name, x: pos.x, y: pos.y }; 

... Sie wollen wahrscheinlich einen anderen zu Variablennamen.

+0

Ja, das hat den Trick gemacht. Danke für die Info ... – NoMadic

0

dictstring ist bereits im JSON-Format, Sie müssen nicht JSON.stringify in Ihrem JS

+0

versucht, JSON.stringify (dictstring) zu entfernen und es als Daten gespeichert: dictstring - aber das hat auch nicht funktioniert – NoMadic

-1

Okay, es dumm klingen mag, aber Sie haben dafür gesorgt, zu behaupten, dass Sie JQuery verwenden in dem Java-Skript, da die Menge von Mal habe ich Ajax gemacht und ich kann nicht herausfinden, warum es nicht funktioniert und weil ich das JQuery nicht deklariert habe.

wie folgt aus:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"> 
0

dataType: "json" verwendet werden soll, wenn die vom Server zurückgegebenen Daten JSON

Sie ist, kann ein Array von Nachrichten erstellen und dann echo json_encode($array); verwenden JSON Daten zu Ihrem js zurückzukehren.

Kommen Sie zu Ihrem Problem, von der Frage und den Informationen, die Sie geliefert haben, konnte ich kein offensichtliches Problem finden, aber ich könnte vorschlagen, console.log(data) in Ihrer Erfolgsfunktion zu verwenden und zu sehen, was zurückgegeben wird.Sie werden zumindest wissen, ob es Ihre PHP-Seite schlagen oder mit einem Fehler wie 404 oder 500.

Versuchen $data_back['sensorid']

oder

Nur print_r($data_back); und sehen Sie die Datenstruktur von $data_back zurück und versuchen Sie dann Zugriff auf die Daten entsprechend.

+0

versuchte das. Es empfängt die JSON-Daten nicht. zeigt Fehler Hinweis: Versuchen Sie, Eigenschaft von Nicht-Objekt in C: \ wamp \ www \ heatmap \ myfile.php in Zeile 7 zu erhalten – NoMadic