Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 将json对象保存到字符串中有一些不需要的字符_Php_Jquery_Ajax_Json - Fatal编程技术网

Php 将json对象保存到字符串中有一些不需要的字符

Php 将json对象保存到字符串中有一些不需要的字符,php,jquery,ajax,json,Php,Jquery,Ajax,Json,我试图将json对象保存到一个文件中,这里有两个问题 第一个是“我如何才能获得成功或错误状态,这表示如何写入json数据 下面是我的代码: $.ajax({ url: 'json.php', type: "POST", // type should be POST data: { json: JSON.stringify(jsonData),

我试图将json对象保存到一个文件中,这里有两个问题

第一个是“我如何才能获得成功或错误状态,这表示如何写入json数据

下面是我的代码:

 $.ajax({
                url: 'json.php',
                type: "POST",  // type should be POST
                data: {
                    json: JSON.stringify(jsonData),

                    name: workerId+".json"
                }, // send the string directly
                dataType: "json",
                success: function (response) {
                    alert(response['status']);
                },
                error: function (response) {
                    alert(response.status);
                }
            });
json.php:

<?php
   header("Content-type: application/json");
   $json = $_POST['json'];
   $name = $_POST['name'];
   $info = json_encode($json);
   $file = fopen($name,'w+');
   fwrite($file, $info);
   fclose($file);
?>
然而,当我使用console.log(JSON.stringify(jsonData))时,我发现结果正是我想要的

{"compartments":[{"id":0,"type":"M","name":"cytosol","x":0.0734694,"y":0.36478122582308947,"w":0.646259,"h":1,"children":{"complexs":[{"id":8,"type":"C","x":0.4442110000000001,"y":0.537736,"w":0.0252632, .....

那么我该如何解决这个问题呢,谢谢!

您从
$\u POST['json']获得的数据
已经是json格式。PHP将其作为字符串获取。通过再次调用json_encode,您只需对字符串进行json_编码,而不是json数据,因为服务器从未解析过该字符串。这会导致PHP引用该字符串并转义任何现有的引号。由于您已经获取json,您不需要json_编码行或您需要使用uld json_解析
$\u POST['json']
,然后再次对其进行json_编码。这是您的选择。第一个选项可能更好。

您对数据进行了两次编码。首先,在Javascript中:

json: JSON.stringify(jsonData),
然后,在PHP中:

$info = json_encode($json);
您看到的结果是已编码字符串的编码版本。请删除PHP中的
json\u encode()
调用:

$json = $_POST['json'];
$name = $_POST['name'];
$file = fopen($name,'w+');
if (fwrite($file, $json) === false)
{
  // something went wrong
}
fclose($file);

注意,我们测试了
fwrite()的结果
查看它是否成功。

谢谢,你是对的!我如何获得成功或错误状态?我的状态返回200你希望它返回什么?如果你想要
200以外的东西,你需要自己发送它。在PHP的最新版本中,你会使用它。有关示例和旧版本中可以使用的替代品,请参见该页面PHP的r版本。错误和成功更多的是ajax调用,而不是PHP脚本的状态。如果加载页面时出现错误(如未找到或权限被拒绝),则会触发错误。如果页面加载成功,则会触发成功。这包括如果出现PHP错误,则通常会将错误输出为标准html/text whic就ajax而言,h是一个有效的响应。您始终可以在php中回显一个状态,该状态将作为传递到success函数的参数,并根据该响应确定success/fail。
$json = $_POST['json'];
$name = $_POST['name'];
$file = fopen($name,'w+');
if (fwrite($file, $json) === false)
{
  // something went wrong
}
fclose($file);