我一直试图用ajax和php将一些数据保存到.json文件中。 目前我收到了错误,我的数据没有保存,也无法找出原因。
这是我的.js文件:
var data = {
"test": "helloworld"
}
$.ajax({
url: "save.php",
data: data,
dataType: 'json',
type: 'POST',
success: function (data) {
$("#saved").text("Data has been saved.");},
error: function (data){
$("#saved").text("Failed to save data !");}
});
这是我的php文件:
$json = $_POST['data'];
if(json_decode($json) != null){
$file = fopen('web/js/data_save.json', 'w+');
fwrite($file, json_encode($json));
fclose($file);
}else{
print("<pre>Error saving data !</pre>");
}
当我试图保存ajax错误时会被触发:
error: function (data){
$("#saved").text("Failed to save data !");
}
我希望有人可以指导我朝正确的方向前进:)
答案 0 :(得分:1)
这对我来说很好
的.js:
$(document).ready(function() {
var json_object = {"data": "helloworld"};
$.ajax({
url: "../tests/save.php",
data: json_object,
dataType: 'json',
type: 'POST',
success: function(json_object) {
console.log(json_object);
$("#saved").text("Data has been saved.");
},
error: function(json_object) {
console.log(json_object);
$("#saved").text("Failed to save data !");
}
});
});
.PHP
$post_data = $_POST['data'];
if (!empty($post_data)) {
$file = fopen('data_save.json', 'w+');
fwrite($file, json_encode($post_data));
fclose($file);
echo json_encode('success');
}
如果你在$ _POST上执行var_dump,你会发现你的变量是作为一个数组在php中发送的。你还需要为回调成功回显一个json字符串
答案 1 :(得分:-1)
您的请求中没有任何密钥data
。
您需要使用http_get_request_body
或其他东西将整个请求体解析为JSON以获取原始体,以获得所需的结果。
编辑:由于似乎存在一些混淆,这里有一些进一步的解释。
向PHP发送JSON POST请求时,不能使用$_POST
变量,就像使用普通请求一样。
curl -H 'Content-Type: application/json' -d '{"foo": "bar"}' myhost/foo.php
将foo.php定义为bellow将打印一个空数组,如果需要,请自行尝试。
<?php
print_r($_POST);
当你需要从POST请求的主体获取JSON时,你需要获得所有正文,然后从JSON解析它。 您可以通过多种方式执行此操作,其中一种方式是我在编辑之前编写的方式。 您也可以使用
获取整个身体而不使用任何扩展名file_get_contents('php://input')
结果应该是一样的。
所以使用下面的代码,你应该得到你想要的东西。
<?php
$json = json_decode(file_get_contents('php://input'), true);
print_r($json);