0

我正在使用 Angular($http.post) 和 PHP 将 json 文件保存到服务器。保存的 json 文件将所有值转换/保存为字符串,包括数字和布尔值。当稍后读取 json 文件时,这显然会导致问题。

PHP代码:

header('Content-Type: application/json;charset=utf-8');

$fh = fopen('savedfiles/'.$_POST['fileName'], 'w') or die("can't open file");

if(fwrite($fh, json_encode($_POST['fileData']))===FALSE){
    echo "FAILED";
}
else {

    echo "SUCCESS";
}

fclose($fh);

角/$http 代码:

var deferred = $q.defer();
var savePromise = $http.post('save.php',{fileName:file_name,fileData:data}).
then(function(response){
  deferred.resolve(response.data);
},function(response){ 
  deferred.resolve("FAILED");
});
return deferred.promise;

感谢您的任何建议!

更新:这是保存的 JSON 文件的输出

更新:这是发送到 PHP 文件之前的数据

4

3 回答 3

2

请注意,您不会直接从POST;获得 JSON 对象。它只是一个字符串,因此对它没有任何意义json_encode。它已经编码,因此只需将其直接保存到文件中,而无需通过编码器。

于 2013-04-26T19:59:06.103 回答
1

You are doing json_encode on data thats already been POSTed. In this case you have a set of key value pairs and all of the values are in string format.

You need to encode them at the client side and then put your JSON string into a single field which you can POST. Then that JSON string has all of the data types preserved.

var json_str = JSON.stringify(myobject); 

Now POST json_str as though it were an HTML form field.

于 2013-04-26T21:15:24.840 回答
1

您可以尝试使用JSON.stringify()将您的数据转换为适合存储在字符串中的格式,然后您可以再次将其解析回来JSON.parse()

var savePromise = $http.post('save.php',{fileName:file_name, fileData: JSON.stringify(data)}).
于 2013-04-26T20:43:25.223 回答