3 Stimmen

Senden von JSON (jQuery) an PHP und dessen Dekodierung

Ich kann mir beim besten Willen nicht erklären, was ich falsch mache. Es scheint, wie es sollte einfach sein, weil ich nicht finden können, jemand anderes mit diesem Problem, aber ich kann nicht herausfinden, um grundlegende Daten über Javascript (jQuery) zu PHP und dekodieren es zu senden. Der Einfachheit halber, das ist, was ich habe:

JAVASCRIPT

var json_data = { "name" : "john doe" };

$.ajax({
    type: "POST",
    url: "../bin/process.php",
    dataType: "json",
    data: json_data
    });

und meine PHP-DATEI

$arr = json_decode("json_data", true);

$fp = fopen('data.txt', "w");
fwrite($fp, $arr['name']);
fclose($fp);

In der Datei, die ich schreibe, ist am Ende nichts mehr drin. Wenn ich eine:

fwrite($fp, 'test');

Ich erhalte eine Datei mit dem Wort test, aber egal was ich tue, ich erhalte nicht die json-Daten, die ich gesendet habe.

Kann mir jemand ein ausführliches Beispiel von A bis Z geben? Danke für jede Hilfe.

5voto

K. Norbert Punkte 10316

Die Ajax-Anfrage, die Sie mit jQuery stellen, sendet den Parameter "name" mit dem Wert "john doe" und nicht das gesamte Objekt. Wenn Sie das gesamte Objekt senden möchten, müssen Sie es wie folgt übergeben:

data: { parameters: json_data }

Auf der PHP-Seite können Sie die Variablen aus der superglobalen Variablen $_POST beziehen. In Ihrem Beispiel würden Sie Folgendes verwenden:

$name = $_POST['name'];

Oder wenn Sie, wie in meinem Beispiel, das gesamte Objekt senden:

$params = $_POST['parameters'];

Es besteht keine Notwendigkeit, json_decode() zu verwenden, da die Parameter, die Sie aus dem $_POST-Array ziehen, bereits native PHP-Variablen sind.

Sie brauchen es nur zu verwenden, wenn Sie einen json-String haben, den Sie in eine PHP-Variable umwandeln wollen, was hier nicht der Fall ist, da jQuery das javascript-Objekt im Hintergrund in einen Query-String "umwandelt".

Es ist ein seltener Fall, dass Sie brauchen, um Daten aus Javascript in einem JSON-Formular zu senden, aber wenn Sie das tun möchten, benötigen Sie etwas wie:

// JS

var person = "{ name: 'John Doe' }"; // notice the double quotes here, this is a string, and not an object
$.ajax({
    type: "POST",
    url: "../bin/process.php",
    dataType: "json",
    data: { json: person }
    });

// PHP

$json = $_POST['json']; // $json is a string
$person = json_decode($json); // $person is an array with a key 'name'

1voto

Tgr Punkte 26333

JQuery kann Daten nicht in JSON kodieren, sondern nur dekodieren (das schlecht benannte dataType Parameter bezieht sich tatsächlich auf den Typ der Antwort). verwenden json2.js für die Kodierung.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X