我在使用 ajax/jQuery 和 PHP 写入 JSON 文件时遇到了一些问题。 我目前的代码是:
jQuery
var object = {
name: 'John',
occupation: 'Lawyer'
}
$(".testing-php").click(function () {
$.ajax({
type: 'POST',
data: {params:object},
url: 'details.php',
success: function (data) {
console.log(object);
alert('success');
},
error: function () {
alert('error');
}
});
这部分似乎工作正常,因为 console.log 语句正确显示 - {"name":"John","occupation":"Lawyer"}
我的 PHP 文件目前是这样的:
<?php
var_dump($_POST);
if (isset($_POST['params']) && strlen($_POST['params'])) {
$params = $_POST['params'];
$jsonObject = json_encode($params);
if (is_writable('js/details.json')) {
file_put_contents('js/details.json', $jsonObject);
echo "success";
} else {
echo "file is not writable, check permissions";
}
} else {
echo "invalid params";
}
?>
最后,当前的 JSON 文件如下所示:
{
"name": "Neil",
"occupation": "web developer"
}
更新
这是 var_dump($_POST) 显示的信息。连同消息 .invalid params'。
array(1) {
["params"]=>
array(2) {
["name"]=>
string(4) "John"
["occupation"]=>
string(6) "Lawyer"
}
}
invalid params
AJAX请求参数在不同的两行,显示为
参数[姓名]:"约翰"
params[occupation]:"律师"
目前我只是对值进行硬编码,直到我让流程正常运行。由于未写入 JSON 文件,谁能告诉我我在这里做错了什么?
非常感谢
最佳答案
一个额外的 !
在这个测试中得到了你想要做的完全相反的事情(读作“不”),删除它应该会有所帮助。还添加/更改了一些测试。
在 ajax 查询中输出一些内容也是一种很好的做法,这样您就可以在浏览器开发工具中从服务器获得一些反馈。
<?php
var_dump($_POST);
if (isset($_POST['params'])) {
$params = $_POST['params'];
$jsonObject = json_encode($params);
if (is_writable('js/details.json')) {
file_put_contents('js/details.json', $jsonObject);
echo "success";
} else {
echo "file is not writable, check permissions";
}
} else {
echo "invalid params";
}
UPDATE :还更新了您的 jQuery 代码以在 params
键下传递 params 变量,以便在服务器端正确获取它(无需字符串化为json 顺便说一下,jQuery 代表你做):
var object = {
name: 'John',
occupation: 'Lawyer'
}
$(".testing-php").click(function () {
$.ajax({
type: 'POST',
data: {params:object},
url: 'details.php',
success: function (data) {
console.log(params);
alert('success');
},
error: function () {
alert('error');
}
});
更新:还删除了一个测试以适应数组类型的$_POST['params']
。
关于php - 使用 jquery/ajax 和 php 将数据发送到 json 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33926159/