我有以下'stringified'JSON数据:
$jsonData = '[{"tnum":"1","tnam":"Title1","snum":"24","word1":"this","word2":"is fun"},{"tnum":"343","tnam":"Title2","snum":"233","word1":"hello","word2:"again"}]'
我的AJAX是:
$.ajax({
url: "doSave3.php",
type: "POST",
data: jsonData,
contentType: 'application/json; charset=UTF-8',
success: function() {
alert("Data saved");
},
error: function() {
alert("Data were not saved");
}
});
服务器端的PHP是:
if(isset($_POST['data'])){
$jsonData = $_POST['data'];
$result = json_decode($jsonData);
foreach ($result as $key => $value) {
if ($value) {
$sql = "INSERT INTO saved_lists (id, title_number, title_name, sub_number, word1, word2) VALUES (NULL, $value->tnum, '$value->tnam', $value->snum, '$value->word1', '$value->word2')";
mysql_query($sql);
}
}
}
我测试了PHP,当我在doSave3.php中设置手动设置$ jsonData时,它可以工作。请注意,在进行此测试时,我还必须删除if(isset($ _ POST ['data']或它不会超过if语句。当我恢复依赖$ _POST ['data']时,没有动作所以我很确定doSave3.php没有收到POST数据。
一些帮助将不胜感激。我已经浏览了所有相似的帖子,并纠正了一些事情,但还没有骰子。
答案 0 :(得分:0)
啊......问题在于你的json字符串。你错过了字符串"word2:"again"
末尾的双引号,这应该是"word":"again"
。
var jsonData = '[{"tnum":"1","tnam":"Title1","snum":"24","word1":"this","word2":"is fun"},{"tnum":"343","tnam":"Title2","snum":"233","word1":"hello","word2":"again"}]';
$.ajax({
url: "echo.php",
type: "POST",
data: 'data='+jsonData,
success: function(data) {
alert(data);
},
error: function() {
alert("Data were not saved");
}
});
});
和echo.php
$json = urldecode($_POST['data']);
var_dump(json_decode($json));
双引号一切正常。:)