拿起 knockout.js,我正在尝试使用 PHP(更具体地说是 Laravel 框架)将数据保存到 mysql 数据库中。这是阿贾克斯:
$.ajax("save", {
data: ko.toJSON(this), // turns the input into JSON I assume?
type: "post",
success: function() {
alert("Success!"); // right now I'm alerting the data to troubleshoot
}
});
以及我将数据保存到数据库中的方法:
// I expect my ajax to send me data that is in json format
// I then decode the data to get an array which I can use to run my query
$data = json_decode(Input::json(), true);
return DB::table('content')->insert($data);
但是,问题是我似乎正在接收对象类型的数据(运行gettype()
并$data
返回json_decode()
错误),stdClass Object
准确地说。在对我的 javascript 中发生的事情进行故障排除后,我警告了数据并且它是 JSON 格式,所以它必须工作。
我确实让它像这样工作:
$data = json_encode(Input::json(), true);
return DB::table('content')->insert(json_decode($data), true);
这成功了,保存到数据库等,但是我很困惑。请原谅我对 JSON 的缺乏经验,但过程不应该是:
- 在前端将数据编码为 JSON
- 向服务器发送数据
- 在后端解码数据,将其转换为服务器可以处理的格式(本例中为数组)
- 插入数据
因此,在我的第一次尝试中不起作用$data = Input::json()
的是对象类型。Json_decode 引发错误,因为它需要一个字符串,现在我有点迷路了,因为我需要 JSON。