【问题标题】:Get JSON data from ajax call to PHP page through POST通过POST从ajax调用获取JSON数据到PHP页面
【发布时间】:2018-06-03 10:27:42
【问题描述】:

我想从进行 AJAX 调用的表单中获取一些数据。我在我的 PHP 页面中将数据作为字符串获取。字符串看起来像

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

现在我想把整个字符串转换成数组,看起来像 ["fname"] => "abc", ["lname"] => "xyz"... 以此类推

ajax 调用如下:

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();
 }); 

这是我的 PHP 代码:

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

现在我尝试将字符串转换为上面的数组

$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.

但这并没有给我所需的数组。我在这里检查了几个答案,但它们并没有解决我的问题。我试图谷歌但没有找到任何解决方案。代码有问题吗?请帮忙。提前致谢。

【问题讨论】:

  • 将 $dec 值按 ':' 拆分,然后从该结果中, [0] 元素是您关联的数组键,而 [1] 是您关联的数组值。然后 json_encode 最后关联的数组。
  • @Taplar 如果我使用 ':' 拆分它,那么我会得到类似 ["fname"]->"abc,lname",["xyz,email"]->"email" 和等等……
  • 你不能用':'分割$content。您将每个 $dec 字符串用“:”分割,整个字符串由逗号分隔的名称值对和冒号分隔的每个名称值对组成。因此,您必须展开它,逗号是最外面的分隔符,然后冒号是每个标记的内部分隔符。

标签: javascript php jquery json ajax


【解决方案1】:

更改引号并添加大括号。然后你可以解码生成的 json

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

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

结果

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

【讨论】:

  • 我也试过这个,比如 $test = json_decode('{' . str_replace("'", '"', $string) . '}', true); 当我检查$test by gettype($test),我得到它为 null
  • 我不得不在你的解决方案中做一个调整, $te = str_replace('"',"",$string); 因为字符串本身带有 "" 。删除它们后,你的解决方案工作得很好。谢谢。
  • 很高兴为您提供帮助。祝你好运!
【解决方案2】:

在上面的代码中,您使用 for 循环的索引作为数组的键。如果您正在尝试存档(我相信它在 Java 中被称为字典)。你可以试试下面的代码:

<?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;
}

【讨论】:

  • 我尝试这样做,但是当我尝试执行 file_put_content("file.txt",$array["fname"]);有什么不对?我希望“fname”应该是关键
  • 嘿,$string 变量应该是您从 file_get_content 中获得的变量。它非常接近您上面提到的代码: $pieces = explode(",",$content); foreach($pieces as $array_format){ list($key,$value) = explode(':',$array_format); $array[$key]=$value; }
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-10
相关资源
最近更新 更多