2017-12-20 1 views
4

Ich möchte einige Daten aus einem Formular abrufen AJAX-Aufruf. Ich erhalte die Daten als String in meiner PHP-Seite. Die Zeichenfolge sieht wie folgt aus:Erhalten Sie JSON-Daten von AJAX-Aufruf an PHP-Seite über POST

'fname': 'abc', 'lname': 'xyz', 'email': '', 'pass': '', 'phone': '', 'gender': ' ‘, 'dob': ''

Jetzt möchte ich diese ganze Zeichenfolge in einem Array konvertieren, welche wie [ "fname"] => "abc" aussehen würde, [ "lname"] => "xyz". .. und so weiter

Der ajax-Aufruf wie unten:

fname = $("#form-fname").val(); 
lname = $("#form-lname").val(); 
email = $("#form-username").val(); 
pwd = $("#form-password").val(); 
phone = $("#form-phone").val(); 
gender = $("#form-gender").val(); 
dob = $("#form-dob").val(); 
var user = {"fname":fname,"lname":lname,"email":email,"pass":pwd,"phone":phone,"gender":gender,"dob":dob}; 
$.ajax({ 
     type: "POST", 
     url: "doRegistration.php", 
     data: user 
}) 
.done(function(msg) {       
     window.location.href = "../profile.php"; 
}) 
.fail(function(msg) { 
     sessionStorage.setItem("success","0"); 
     window.location.reload(); 
}); 

und hier ist mein PHP-Code:

$content = file_get_contents("php://input"); 
file_put_contents("log1.txt",$content); //This produces the string I get above 

Jetzt versuche ich, wie oben

$dec = explode(",",$content); 
$dec1 = array(); 
for($i=0;$i<count($dec);$i++) 
{ 
    $dec1[i] = substr($dec[i],strpos($dec[i],":")); 
} 
//After this $dec1 is empty and count($dec1) gives 0. 

die Zeichenfolge in einem Array zu konvertieren Aber das gibt mir nicht die erforderliche Array. Ich habe hier einige Antworten überprüft, aber sie lösen mein Problem nicht. Ich habe versucht zu googeln, fand aber keine Lösung. Ist im Code etwas nicht in Ordnung? Freundlich helfen. Danke im Voraus.

+0

Split Ihre $ Dezember Werte von ‚:‘ dann von diesem Ergebnis die [0] Element Ihrer zugehörigen Array-Schlüssel ist, und die [1] ist Ihr assoicated Array-Wert. Dann json_encode das zugeordnete Array am Ende. – Taplar

+0

@Taplar wenn ich es mit ':' teile, dann bekomme ich etwas wie ["fname"] -> "abc, lname", ["xyz, email"] -> "email" und so weiter ... – CoolJavaProgrammer

+0

Du Teilen Sie $ content nicht durch ':'. Sie teilen jede $ dez-Zeichenfolge durch ":" Die gesamte Zeichenfolge besteht aus Name-Wert-Paaren, die durch Komma getrennt sind, und jedes Name-Wert-Paar wird durch einen Doppelpunkt getrennt. Sie müssen das also abwickeln, wobei das Komma der äußerste Separator ist und dann der Doppelpunkt der innere Separator für jeden dieser Token ist. – Taplar

Antwort

4

Ändern Sie Anführungszeichen und fügen Sie geschweifte Klammern hinzu. Dann können Sie entschlüsseln json

$string = "'fname':'abc','lname':'xyz','email':'','pass':'','phone':'','gender':'','dob':''"; 

print_r(json_decode('{' . str_replace("'", '"', $string) . '}', true)); 

Ergebnis

Array 
(
    [fname] => abc 
    [lname] => xyz 
    [email] => 
    [pass] => 
    [phone] => 
    [gender] => 
    [dob] => 
) 
+0

Ich habe das auch versucht wie $ test = json_decode ('{'. Str_replace ('' ',' '', $ string). '}', True) und wenn ich den Typ von $ test von gettype ($ test), Ich bekomme es als null – CoolJavaProgrammer

+0

https://eval.in/922962 - überprüfen Sie die Quellzeichenfolge Ich habe es von Ihrer Frage genommen – splash58

+0

Ich musste eine zwicken in Ihrer Lösung, $ te = str_replace ('' ', "", $ string); weil die Saite selbst "" mit sich trug. Nachdem Sie sie entfernt hatten, funktionierte Ihre Lösung einwandfrei. Vielen Dank. – CoolJavaProgrammer

0

In Ihrem Code resultierenden oben, verwenden Sie den Index der for-Schleife für den Schlüssel des Arrays. Wenn Sie versuchen zu archivieren (ich glaube, es heißt Wörterbuch in Java). Sie können den folgenden Code versuchen:

<?php 
$string = "'fname':'abc','lname':'xyz','email':'','pass':'','phone':'','gender':'','dob':''"; 
$pieces=explode(',',$string); 
foreach($pieces as $array_format){ 
list($key,$value) = explode(':',$array_format); 
$array[$key]=$value; 
} 
+0

Ich habe versucht, dies zu tun, aber ich kann keinen Wert sehen, wenn ich versuche, file_put_content ("file.txt", $ array ["fname"]); Stimmt irgendetwas nicht? Ich hoffe, "fname" sollte der Schlüssel sein – CoolJavaProgrammer

+0

Hey, die $ String-Variable sollte die sein, die Sie aus dem File_get_content erhalten. Es ist wirklich nah an Ihrem Code oben erwähnt: $ pieces = explode (",", $ content); foreach ($ pieces als $ array_format) { Liste ($ key, $ value) = explodieren (':', $ array_format); $ array [$ key] = $ value; } – Dippy

Verwandte Themen