2016-06-11 6 views
0

abgerufen werden Ich sende JSON in einem POST zu meinem PHP-Skript. Ich kann die Objektwerte nicht vom JSON abrufen. Das Format des POST ist wie folgt:JSON konnte nicht von Ajax POST mit PHP

[{ "name": "Betrag", "Wert": "12"}]

Javascript

("#idForm").submit(function(e) { 

     var url = "post.php"; // the script where you handle the form input. 
     var formData = JSON.stringify($("#idForm").serializeArray()); 
     alert(formData); 

     $.ajax({ 
     type: "POST", 
     url: url, 
     data: formData, 
     dataType: 'json', 
     success: function(dataresponse) { 
      document.getElementById("orderamount").innerHTML = dataresponse.orderamount; 
     } 
     }); 

PHP

if(!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') { 

$data = array(); 

$json = json_decode(file_get_contents('php://input'), true); 
$data['orderamount'] = $json['amount']; 
//this works 
//$data['orderamount'] = '12345'; 

echo json_encode($data); 
} 

Beliebig Idee, was ich falsch mache?

+0

Mögliche Probleme: 1) versuchen Sie, console.log (formData) und überprüfen Sie, ob es korrekt ist. 2) console.log (Datenresponse) und prüfen, ob der Zugriff auf die Daten über die Datenantwort möglich ist. 3) in PHP, überprüfen Sie, ob Sie wirklich beitreten der if, vielleicht Protokollierung Zeug in einer TXT-oder HTML-Datei, um zu verfolgen, was passiert (verwenden Sie file_put_contents). In all diesen Fällen ist die JavaScript-Konsole Ihr bester Freund, es sagt Ihnen normalerweise, was NICHT funktioniert oder was es als Antwort zurückbekommt. PHP tut das aber nicht (nicht direkt über eine AJAX-Anfrage), also kümmere ich mich auch um den dritten Punkt. – briosheje

+0

siehe @swaps Antwort unten. Sie haben eine Syntax für ein Array, das viele Name/Wert-Tupel enthalten kann. Behandle es als ein Array. – YvesLeBorg

+0

Webkonsole war nicht viel Hilfe. Ich habe die Inhalte aus den PHP-Skripten in eine txt-Datei geschrieben. Ausgabe ist - a: 5: {i: 0; a: 2: {s: 4: "Name"; s: 6: "Betrag"; s: 5: "Wert"; s: 2: "12";} } – mmmbaileys

Antwort

-2

Bitte versuchen Sie es, bevor die Anforderung senden

setRequestHeader("Content-type", "application/x-www-form-urlencoded"); 
+1

Es ist keine Anwendung/x-www-Form-urlencoded Daten, es ist JSON. – Quentin

1

Wir JSON Array analysieren kann, und Wörterbücher im Inneren, wie diese,

<?php 
$json = "[{\"name\":\"amount\",\"value\":\"12\"}]"; 
$dec = json_decode($json,true); 

for($idx = 0; $idx < count($dec); $idx++){ 
    $obj = (Array)$dec[$idx]; 
    echo $obj["name"]; 
} 
?> 
-2

in Reaktion

document.getElementById ("Auftrag ") .innerHTML = Datenantwort ['orderamount'];

0

In Ihrem Beispiel json gibt es zwei Parameter, Name und Wert.

[{ "name": "Betrag", "Wert": "12"}]

Sie $json['name'] statt $json['amount'] verwenden sollten. Sie können das folgende Beispiel versuchen

if(!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') { 
$data = array(); 
$json = json_decode(file_get_contents('php://input'), true); 
if($json['name']=='amount') { 
$data['orderamount'] = $json['value']; 
} 
echo json_encode($data); 
}