我在使用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":&#34 ;律师"}
我的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&#39;。
array(1) {
["params"]=>
array(2) {
["name"]=>
string(4) "John"
["occupation"]=>
string(6) "Lawyer"
}
}
invalid params
AJAX请求参数位于两个不同的行上,显示为
PARAMS [名称]:&#34;约翰&#34;
PARAMS [占用]:&#34;律师&#34;
我只是简单地对数值进行硬编码,直到我开始工作。任何人都可以告诉我我在做错了什么,因为JSON文件没有被写入?
非常感谢
答案 0 :(得分:3)
在这个测试中,一个额外的!
让你与你的意图完全相反(读作“不是”),删除它应该有所帮助。还添加/更改了一些测试。
在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']
。
答案 1 :(得分:0)
您可能希望进行一些验证,以确保您的params安全到达那里。